您的位置:首页 > 理论基础 > 数据结构算法

C#基本数据结构——枚举、结构体、数组和集合

2011-07-15 20:21 441 查看
一、值类型
C#
支持两种值类型:枚举和结构
1.1 枚举(enum)
1)和所有值类型一样,枚举可以使用?修饰符来创建一个可空的枚举变量,如:Season? colorful=null;
2)可以指定枚举的类型,如:
enum Season{spring=1,summer,fall,winter}可以,也可以像下面这样声明:
enum Season:short{spring,summer,fall,winter}
一种枚举看可以基于8种整数类型的任何一种:byte,sbyte,short,ushort,int,uint,long或者ulong
1.2 结构(Struct)——结构体和类的区别
1)结构体是值类型,而类是引用类型
2)结构体的实例称为值,存储在栈上,而类的实例称为对象,存储在堆上
3)结构体不能为结构声明默认构造函数,而类可以;但是,如果没有写构造函数,结构体和类一样会有一个默认的构造函数,只是结构体不能显示地为自己写默认构造函数
4)结构体即使自己声明了构造函数,编译器还是会为其生成默认构造函数,而类则不会;
5)在类中,声明变量(实例字段)的同时,就可以初始化它,而结构体不可以,它必须在函数里面初始化
6)结构体的构造器如果不初始化字段,编译器是不会帮助其初始化的,而类则可以
二、数组和集合
2.1 数组变量
1)初始化数组 int [] pins=new int[4] {9,3,7,2};
初始化数组时,实际上可以省略new表达式和数组的大小,如:
int [] pins={9,3,2,7};
2)创建隐式类型的数组
如果在声明数组的时候指定了一个初始值列表,就可以让C#编译器自己推断数组中的元素的类型,如下所示:
var names=new[]{"John","Dim","Rose"};
首先,我们省略了类型后的方括号,本例中的names变量被声明为var,而不是var[];其次,必须在初始值列表之前添加new[]。注意:使用这个语法,必须保证所有初始值都有相同的类型。
3)复制数组
i)
int[] pins={9,7,3,2};
int[] alias=pins;//pins 和alias引用同一个数组实例
这里,pins改变了,alias也会跟着改变,所以,不是真正物理上的拷贝,只是引用相同
ii)如果想要真正复制一个数组实例,获得堆上实际数据的副本,那么必须做两件事:其一、必须创建类型和大小与原始数组相同的一个新的数组实例;其二,将数据元素逐个复制到新数组
iii)用CopyTo方法,将一个数组复制到另一个数组,并从指定的位置开始
iv)用Copy,从0下标开始复制,并要指定复制长度
2.2 集合
集合有很多种类型,熟悉的有ArrayList、Stack、Queue;目前还较为生疏的有:Hashtable、SortedList。
Hashtable和SortedList是关联数组,在用的时候,要将键值和映射的目标值一起成对存入。以Hashtable为例:
1)Hashtable不能有重复的key值,如果调用add来添加一个已有的key,就会抛出异常,如果使用方括号表示法来添加一个key/Value对(下例就是这样),就不会抛异常;
2)使用foreach语句遍历一个Hashtable时,会返回一个DictionaryEntry。DictionaryEntry类允许通过Key属性和Value属性来访问两个object数组中的key和value元素;
Hashtable ages=new Hashtable();
ages["John"]=44;
ages["Dim"]=20;
ages["Tim"]=50;
SortedList和Hashtable一样,只是keys数组总是排好序的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: