.net 数组

数组:数组是允许将多个数据项当作一个集合来处理的机制------[来自clr via c#第三版]


简介


数组是引用类型,数组中的数据类型必须是相同的或者都能够隐式转换为一个类型,在声明一个数组类型之后,会被初始化为null,在实例化之后会在内存进行数据分配(如果没有指定值会分配默认值,引用类型为null,值类型为0)
String[] arrNames = new String[3];
数组一旦初始化完成之后,数组长度就变成固定的,除非重新实例化该数组.
String[] arrNames = new String[3];
 Console.WriteLine("arrNames's length is:{0}", arrNames.Length);


arrNames = new String[6];
Console.WriteLine("arrNames's length is:{0}", arrNames.Length);
该代码的运行结果是:
arrNames's length is:3
arrNames's length is:6


数组元素赋值:
给数组元素赋值有两种方式:
初始化数组时:
 String[] arrNames = new String[] { "tom", "jim", "lily" };编译器能够推断出arrNames的长度为3
使用索引:
 arrNames = new String[2];
 arrNames[0] = "tom2";
 arrNames[1] = "jim2";
如果你写的索引值超出数组的界限arrNames[2] = "jim2";,在运行时会抛出一个IndexOutOfRangeException的异常。
如果数据类型不对应arrNames[1]=2,则在编译时就会报错:类似于:Cannot implicitly convert type 'int' to 'string'


数组类型转换
如果数组元素的类型是引用类型,则可以将一个数组隐式转换为一个兼容的类型:
String[] arrTypes = new String[] { "tom", "jim", "lily" };
Object[] arrObj = arrTypes;
如果数组元素的类型是值类型,将该数组赋给一个引用类型之后,在编译时会报一个错误:
Cannot implicitly convert type 'int[]' to 'object[]'
不过可以使用Array类的静态方法Array.Copy来实现赋值的操作
Object[] arrObj2 = new Object[3];
Int32[] arrValues = new Int32[] { 12, 32, 43 };
Array.Copy(arrValues, arrObj2, arrValues.Length);
Array.Copy的方法签名:public static void Copy(Array sourceArray, Array destinationArray, int length)
如果copy的源数组长度大于目标数组长度,会在运行时抛出一个System.ArgumentException异常,
如果copy的源数组长度小于目标数组长度,则会用默认值填充剩余的数据,不过,在调用Array.Copy时要注意,如果源数值的数据元素类型是值类型,而目标数组的数据元素类型是引用类型,则会在调用Array.Copy时进行装箱。


由于所有数组都继承自Array类,则所有数组都可以继承Array类的方法,属性,具体的Arry类成员见:http://msdn.microsoft.com/zh-cn/library/system.array(v=vs.110).aspx


注意:
如果你所定义的数组类型是0基数组(数组坐标以0开始),则该数组还会继承IEnumerable,Icollection.IList
for (int i = 0; i < arrTypes.Length; i++)
            {
                Console.WriteLine("name is:{0}", arrTypes[i]);
            }
有的时候我们为了获得更好的性会把arrTypes.Length给提出来,声明为一个变量。其实完成没有必要,编译会对在调用0基数组的Length属性时自动进行保存。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值