C#学习笔记 11.01

C#学习笔记 11.01

(学习视频来自bilibili的传智播客赵老师基础教学视频)

ArrayList 集合

这是一个普通类(非静态类)
这个东西的优势是长度不固定,可以任意改变。

如果我们调用其 Add方法,可以在后面接入各种类型(Object)的数据,即使是自定义类型也可以。
有一个属性 count 代表集合里面元素的个数,如果我们实例化一个集合,又在这个集合中加入了另一个集合,那么加进去的这个集合也是其中的一个元素。

用 Add 方法放进去的时候放啥都很简单,因为子类可以赋值给父类。
但是往外取的时候如果里面有集合就很麻烦了,因为我们要进行类型转换才能得到其相应的方法。
所以我们添加数组的时候一般都是用 AddRange 这个方法,这个方法是把集合(数组)搞成了单个元素来添加的一个方法,大概就是循环了一下,不停的 add。

Add()添加单个元素
AddRange()添加一堆元素

Clear() 清空结合
Remove() 移除匹配的对象(写了谁就删除谁),如果没有的的话则不移除
RemoveAt() 移除某一索引的元素
RemoveRange()移除从某一索引开始,一定长度的所有元素
Insert() 在特定位置插入某一元素
InsertRange 在特定的位置插入一堆元素,同样是一个个插进去的。
Contains() 确定集合中是否含有某一元素,返回值是 bool 类型

解释一下为什么集合的长度可变

count 属性 值代表的是集合实际包含的元素个数
capacity 属性 值代表的是集合中可以包含元素的个数
但我们每次在集合中添加元素的时候,当我们添加的数量超过了可包含的元素个数的时候,就会向内存申请原来一倍的空间

集合和数组的优缺点

集合长度可变,可以添加任何类型的元素
但是集合在取值的时候需要不停的进行类型转换(里氏转换)

Hashtable 集合

这个被称为字典集合,键值对集合
在键值对集合中,我们添加一个值的同时也要添加一个键,对类型都没有要求,但是要对应起来。
键值对集合中,我们可以根据键去找到对应的值,和索引看起来很像,但是我们的索引不再限定为 int 类型。
值得注意的是我们的键值对集合中 键 一定要是唯一的,语法没错,但是会报异常。

这个时候因为键这个东西的类型是不确定的,所以用 for 循环就不好实现了,因为 for 循环的时候我们的 i 是 int 的。
这个时候用 foreach 配合 var 就可以了

var 这个东西可以根据变量的值得到变量的类型,这样一来就不用因为键的类型多变而头疼了。

在我们往键值对集合添加东西的时候可以用 add() 方法 ,也可以用 ht【键】 = 值 这种方法。
在使用后一种方法的时候会进行一个判断,如果这个键没有出现过,那么就会往键值对集合中添加这么一对,如果出现过就会变成赋值。

.key 这个属性可以调出来键集合

关于 File 的补充

之前进行的是文档层面的操作

ReadAllLine() 返回字符串数组(一行是一个),读取文本文件(拖到TXT中还能看得懂的文件)
ReadAllText()返回的是字符串,也是读取文本文件

ReadAllBytes() 得到的是字节数组,想要看懂的话就需要进行解码
用字节数组接收 byte[ ]
System.Text.Encoding.GetEncoding.编码格式.GetString(字节数组) 用这个来解码
这个东西的优势是可以操作一切类型的文件,前面那两个都只能读取文本文件。

产生乱码的原因:保存的时候和打开的时候编码格式不一致。

前面说的读,再说说写

File.WriteAllLine(路径,字符串数组) 一个元素一行,覆盖原文件写入,没有会新建。
File.WriteAllText(路径,字符串) 覆盖原文件写入
File.WriteAllBytes(路径,字节数组) 也是覆盖写入
这个要先把字符串转成字节数组
System.Text.Encoding.编码格式.GetBytes(字符串)

如果想要追加,需要用这几个,如果乱码的话就需要调一调编码格式
File.AppendAllLine()
File.AppendAllText()
File.AppendAllBytes()

注:File 类只能操作小文件,原理上 File 类是一口气全读的,所以对大文件就会比较慢,上面提到的路径都是到文件名的,后面文件夹操作的路径是到目标文件夹。

文件夹操作 Directory

同样是一个静态类
Directory.CreateDirectory(路径) 创建文件夹
Directory.Delete(路径,true) 删除文件夹,true则是删除文件夹及里面所有文件(false则是有文件则不删)
Directory.Move(路径,路径)移动文件夹到目标位置

Directory.GetFiles(路径)返回目标文件夹下的文件路径,同时其重载支持搜索出目标文件
Directory.GetDirectories(路径)返回目标文件夹下的文件夹路径

配合 Path 类,这个类操作的是路径字符串,操作结果也是字符串
Path.GetFileName(路径字符串)获得文件名称
Path.GetFileNameWithoutExtension(路径字符串)获得文件名称,不包括扩展名
Path.GetFileExtension(路径字符串)获得文件扩展名
Path.GetDirectoryName(路径字符串)获得文件夹路径
Path.GetFull了Path(路径字符串)获得文件绝对路径(原本的字符串应该就是个绝对路径吧)

不过感觉这个类比较鸡肋~~用 string 的各种方法也可以实现这些功能。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值