C#中的数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中的数组相关的知识,希望对你有一定的参考价值。

多维数组
  1. int[,,] s3 = new int[3, 4, 2] {
  2. { {1,2 }, {2,3 }, {3,4 }, {4,5 }},
  3. { {1,2 }, {2,3 }, {3,4 }, {4,5 }},
  4. { {1,2 }, {2,3 }, {3,4 }, {4,5 }}
  5. };
这种多维数组用一个迭代的概念来理解比较好理解,最小的单元是一个int[2]数组(两个元素),然后是4个int[2],然后是3个(4个int[2])。

创建array数组

用[]声明数组是C#中使用Array类的记号,在后台会创建一个派生于抽象基类Array的新类。这样就可以使用Array类为每个C#数组定义的方法和属性了。int和string类都继承了array类,所以可以直接用int[] i=new int[4]这种方式来声明数组。array只有2种创建数组的方法,一种是下面代码中Array.CreateInstance(这种方法),另一种是直接在类的后面加括号。

由于Array类是一个抽象类,所以不能用构造函数来创建数组。但除了可以使用C#语法创建数组实例之外,还可以使用静态方法CreateInstance()创建数组(如果事先不知道元素的类型,就可以使用该静态方法)。


  1. var a = Array.CreateInstance(typeof(char), 10); // 创造一个char类型,长度为10的数组
  2. string b = "spike";
  3. a = b.ToArray();
  4. foreach (var item in a)
  5. {
  6. Console.WriteLine(item);
  7. }
  8. Console.ReadKey();

把一个Array添加Arraylist对象上

  1. Foreach (object a in Array) // 当然array是一个抽象类,这样写就是演示一下,可以使用array的继承类来这样做,比如int string
  2. {
  3. ArrayList.Add (a);
  4. }

那么CopyTo()Clone()方法的区别是什么呢?
区别是用法上的不同
Array1.CopyTo(Array2,0);
Array3 = Array2.Clone();  
其中Array2必须是一个已经实例化的数组.Clone()的返回值是object,不必提前实例化.
这样,我相信理解这两个方法的区别就很容易了.本质上并没有什么区别.都属于浅拷贝.如果拷贝所有的数组,就是用Clone().但是如果只是拷贝一部分,就可以选择CopyTo(),CopyTo()的参数提示是这样的CopyTo(Array array,int Index).第二个参数index(索引)是指明从数组中的第几个对象开始复制对于浅拷贝:如果数组中的成员为值类型(:int,float,double,byte),则完全复制数值到目标数组中,如果是引用类型(如用户自定义类型:class Student,class People,或者是类库中的类类型:ArrayList),则指复制引用给目标数组.
测试代码如下
  1. int[] a = { 1, 2, 3, 4, 6, 7, 8 };
  2. var b = (int[])a.Clone();
  3. int[] c = new int[9];
  4. a.CopyTo( c,0);
  5. foreach (var item in c)
  6. {
  7. Console.WriteLine(item);
  8. }
  9. Console.WriteLine();
  10. foreach (var item in b)
  11. {
  12. Console.WriteLine(item);
  13. }
  14. Console.ReadKey();

C# 中的ToArray()和ToList()对比

ToArray<TSource>(IEnumerable<TSource>) 方法强制进行直接查询计算,并返回一个包含查询结果的数组。可将此方法追加到您的查询,以获得查询结果的缓存副本。

ToList<TSource> 具有类似的行为,但它返回一个 List<T>,而非一个数组。

  1. string[] ii = { "1", "2", "3", "1", "0", "2" };
  2. var de = ii.ToArray();
  3. Console.WriteLine(de[0]); // 这里de还是一个string[]类型的数组( 输出验证为system.string[] ),继承了array抽象类的数组
  4. // 主要看toArray前面的元素可以最低分解成什么类型的元素,就以这个元素的数组类型作为新对象的数组类型
  5. // 比如如果 string name = "jingya" ; 那么toArray()后就为char[]数组
  6. // int[] ii = {1,2,3} ; 那么toArray()后就为int[]数组
  7. var di = ii.ToList(); // 创建一个集合,集合才有Sort方法,才能使用foreach
  8. di.Sort();
  9. foreach (var item in di)
  10. {
  11. Console.WriteLine(item);
  12. }
  13. Console.WriteLine();
  14. int[] jj = { 1, 2, 3, 4, 12, 3, 4, 5, 2, 2, 1, 3, 4 };
  15. Console.ReadKey();

 







以上是关于C#中的数组的主要内容,如果未能解决你的问题,请参考以下文章

XSS:如何从 C# 中的字符串中删除 JS 片段?

C# 最有用的(自定义)代码片段是啥? [关闭]

c#代码片段快速构建代码

此 Canon SDK C++ 代码片段的等效 C# 代码是啥?

是否可以动态编译和执行 C# 代码片段?

C#常用代码片段备忘