Fork me on GitHub

数组

1,所有数组都隐式派生自System.Array

2,所有数组都隐式实现IEnumerable,ICollecation,IList

①创建一个0基数组类型时,CLR自动是数组类型实现IEnumberable<T>,ICollection<T>,IList<T>。同时,还为数组类型的所有基类型实现这三个接口。以下层次结构图对此进行了澄清

Object

         Array(非泛型IEnumberable,ICollection,IList)

                   Object[](IEnumberable,ICollection,IList of Object)

                            Stream[](IEnumberable,ICollection,IList of Stream)

                                     FileStream[](IEnumberable,ICollection,IList of FileStream)

 

②如果数组包含值类型的元素,数组类型不会为元素的基类型实现接口(DateTime[] dtArray)

3,创建下限非零的数组

        static void Main(string[] args)
        {

            //下届非0的二维数组
            int[] lowerBounds = {2015, 1};//下界
            int[] lengths = {5, 4};//它包含要创建的 System.Array 的每个维度的大小

            var d = (decimal[,]) Array.CreateInstance(typeof (decimal), lengths, lowerBounds);

            Console.WriteLine(d.GetLowerBound(0));//1维第一个元素的索引。输出2015
            Console.WriteLine(d.GetUpperBound(0));//1维最后一个元素的索引。输出2019
            Console.WriteLine(d.GetLowerBound(1));//2维第一个元素的索引。输出1
            Console.WriteLine(d.GetUpperBound(1));//2维最后一个元素的索引。输出4


            Console.ReadKey();

        }

4,CLR内部实际支持两种不同的数组
①下限为0的一维数组。这些数组有时称为SZ(一维0基)数组或向量
②下限未知的一维或多维数组

        static void Main(string[] args)
        {
            Array a;
            //创建一维0基数组,不包含任何元素
            a = new string[0];
            Console.WriteLine(a.GetType());//System.String[]

            //创建一维0基数组,不包含任何元素
            a = Array.CreateInstance(typeof (String), new int[] {0}, new int[] {0});
            Console.WriteLine(a.GetType());//System.String[]

            //创建一维1基数组,不包含任何元素
            a = Array.CreateInstance(typeof(String), new int[] { 0 }, new int[] { 1 });
            Console.WriteLine(a.GetType());//System.String[*]  *符号表明CLR知道该数组不是0基的

            //创建二维0基数组,不包含任何元素
            a = new string[0,0];
            Console.WriteLine(a.GetType());//System.String[,]

            //创建二维0基数组,不包含任何元素
            a = Array.CreateInstance(typeof(String), new int[] { 0,0 }, new int[] { 0,0 });
            Console.WriteLine(a.GetType());//System.String[,]

            //创建二维1基数组,不包含任何元素
            a = Array.CreateInstance(typeof(String), new int[] { 0,0 }, new int[] { 1,1 });
            Console.WriteLine(a.GetType());//System.String[,]

            Console.ReadKey();
        }

在运行时,CLR将所有的多维数组都视为非0基数组
访问一维0基数组的元素比访问非0基一维或多维数组的元素稍快

posted on 2017-06-03 18:12  *Hunter  阅读(188)  评论(0编辑  收藏  举报

导航

AmazingCounters.com