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

本文详细介绍了C#中的值类型,包括枚举(enum)和结构(Struct)的区别,以及数组和集合的使用。枚举允许指定类型并创建可空变量,结构体作为值类型与类的引用类型有显著差异。数组的初始化、复制方法以及集合如ArrayList、Stack、Queue、Hashtable和SortedList的特点也进行了讲解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、值类型
    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数组总是排好序的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值