1、里氏转换
1)、子类可以赋值给父类
2)、如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象
2、类型转换
is:表示类型转换,如果能够转换成功,则返回一个true,否则返回一个false
as:表示类型转换,如果能够转换则返回对应的对象,否则返回一个null
ArrayList集合
集合:很多数据的一个组合
数组:长度不可变、类型单一
集合的好处:长度可以任意改变 类型随便
- 基本使用
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _01ArrayList集合
{
class Program
{
static void Main(string[] args)
{
//创建集合对象
ArrayList list = new ArrayList();
list.Add(1);
list.Add(3.24);
list.Add(true);
list.Add("张三");
list.Add('女');
list.Add(5000m);
list.Add(new int[] { 1, 2, 4 });
Person p = new Person();
list.Add(p);
list.Add(list);
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}
Console.ReadKey();
}
//我们将一个对象输出到控制台 默认情况下 打印的就是这个对象所在的类的命名空间
public class Person
{
public void sayHello()
{
Console.WriteLine("hello");
}
}
}
}
这个结果好像并不是我们想达到的。这是因为我们将一个对象输出到控制台 默认情况下 打印的就是这个对象所在的类的命名空间
- 我们使用里氏变化来转换下 修改for循环中的代码如下。
for (int i = 0; i < list.Count; i++)
{
if (list[i] is Person)
{
((Person)list[i]).sayHello();
}
else if (list[i] is int[])
{
for (int j = 0; j < ((int[])list[i]).Length; j++)
{
Console.WriteLine(((int[])list[i])[j]);
}
}
else
{
//未判断
Console.WriteLine(list[i]);
}
}
从结果可以看出问题得到了解决,当然最后一个没有进行转换。因为写起来烦。。。
- 当我们需要添加单个元素的时候可以用Add()方法,但当需要添加集合的时候选用AddRange()更方便,看例子
static void Main(string[] args)
{
ArrayList list = new ArrayList();
list.Add(1);
list.Add(3.24);
list.Add(true);
list.Add("张三");
list.Add('女');
list.Add(5000m);
//添加集合
list.AddRange(new int[] { 1, 2, 4 });
list.AddRange(list);
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}
Console.ReadKey();
}
使用AddRange()可以省略上面for循环中的一坨代码。
常用的一些方法。
//清空所有元素
list.Clear();
//删除单个元素
list.Remove("张三");
//根据索引删除元素
list.RemoveAt(0);
//根据下表删除一定范围的元素
list.RemoveRange(0, 3);
//升序排列
list.Sort();
//反转元素
list.Reverse();
//在指定位置插入一个元素
list.Insert(1, "插入的");
//在指定位置插入集合
list.InsertRange(2, new char[
//判断集合是否包含某个元素
bool b = list.Contains('A');
- ArrayList集合的长度问题
每次集合中实际包含的元素个数(count)超过了可以包含的元素的个数(capcity)的时候,集合就会向内存中申请多开辟一倍的空间,来保证集合的长度一直够用。
HashTable (键值对集合)
在键值对集合当中,我们是根据键去找值的。
语法:键值对对象[键]=值;(键不可以重复,值可以重复)
键值对对象[键] = 值(键不存在,添加该数据;键存在,覆盖该键已经存在的对应数据)
static void Main(string[] args)
{
//创建一个键值对集合对象
Hashtable ht = new Hashtable();
ht.Add(1, "张三");
ht.Add(2, true);
ht.Add(false, "错误");
ht[9] = "新来的";//这也是一种添加数据的方式
ht[1] = "把张三干掉";//如果有键1 就添加,有就覆盖
//在键值对集合中,是根据键去找值的
Console.WriteLine(ht[1]);
Console.WriteLine(ht[2]);
Console.WriteLine(ht[false]);
foreach (var item in ht.Keys)
{
Console.WriteLine("键{0} ------ 值{1}", item, ht[item]);
}
Console.ReadKey();
}
对于键值对集合取值,可以采用foreach循环
小练习:简繁转换
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _04简繁转换
{
class Program
{
private const String jian = "张长场";
private const String fan = "張長場";
static void Main(string[] args)
{
Hashtable ht = new Hashtable();
for (int i = 0; i < jian.Length; i++)
{
ht.Add(jian[i], fan[i]);
}
Console.WriteLine("请随便输入");
string input = Console.ReadLine();
//将用户输入的简体字转换成繁体字
for (int i = 0; i < input.Length; i++)
{
if (ht.ContainsKey(input[i]))
{
Console.Write(ht[input[i]]);
}
else
{
Console.Write(input[i]);
}
}
Console.ReadKey();
}
}
}
Path类
专门用来操作路径的一个类。直接上代码。
static void Main(string[] args)
{
string str = @"D:\CodeRush\Support\abc.mp4";
//int index = str.LastIndexOf("\\");
//str = str.Substring(index +1);
//Console.WriteLine(str);
//获取文件名字
Console.WriteLine(Path.GetFileName(str));
//获取文件名不包括扩展名
Console.WriteLine(Path.GetFileNameWithoutExtension(str));
//获取文件的扩展名
Console.WriteLine(Path.GetExtension(str));
//获取文件所在文件夹的名称
Console.WriteLine(Path.GetDirectoryName(str));
//获取文件所在的全路径
Console.WriteLine(Path.GetFullPath(str));
//连接两个字符串作为路径
Console.WriteLine(Path.Combine(@"c:\a\",@"b.text"));
Console.ReadKey();
}
File类
直接丢代码
static void Main(string[] args)
{
//创建文件
//File.Create(@"C:\Users\Administrator\Desktop\new.txt");
//删除文件
//File.Delete(@"C:\Users\Administrator\Desktop\new.txt");
//复制一个文件
File.Copy(@"C:\Users\Administrator\Desktop\new.txt", @"C:\Users\Administrator\Desktop\new2.txt");
Console.ReadKey();
}
编码
文本文件编码,文本文件有不同的存储方式,将字符串一什么样的形式保存为二进制,这就是编码。
产生乱码的原因:就是因为你保存这个文件的编码格式跟你打开这个文件的编码格式不一样。
往期回顾