標籤:des cWeb style blog color 使用 os strong
派生關係:
System.Object => System.Array => 數組
數組是參考型別,是在託管堆上進行分配的。
Int32[] myIntegers; //聲明了一個數組引用,初始設定為nullmyIntegers = new Int32[100]; //建立了含有100個Int32的數組,初始化為0。該數組的記憶體塊地址被返回並儲存到myIntegers變數中
建立參考型別數組:
Control[] myControls; //聲明一個數組引用myControls = new Control[150]; //建立含有50個Control引用的數組,分配含有50個Control引用的一個數組,這些引用全部被初始化為null。
建立多維陣列:
//建立二維數組,由Double值構成Double[,] myDoubles = new Double[10,20];//建立三維數組,由String引用構成String[,,] myStrings = new String[5,3,10];
CLR支援交錯數組(jagged array),即由數組構成的數組。
如何建立多邊形數組,每個多邊形由一個Point執行個體數組構成:
//建立含有Point數組的一維數組Point[][] myPolygons = new Point[3][];//myPolygons[0]引用一個含有10個Point執行個體的數組myPloygons[0] = new Point[10];//myPolygons[1]引用一個含有20個Point執行個體的數組myPolygons[1] = new Point[20];//myPloygons[2]引用一個含有30個Point執行個體的數組myPloygons[2] = new Point[30];//顯示第一個多邊形中的Pointfor(Int32 x=0;x < myPloygons[0].Length; x++){Console.WriteLine(myPloygons[0][x]);}
16.1 初始化數組元素
String[] name = new String[]{"Aidan","Grant"}; //大括弧中以逗號分隔的資料項目稱為數組初始化器,每個資料項目都可以是一個任意複雜度的運算式。
文法糖簡寫:
String[] names ={"Aidan","Grant"};
但不允許寫成:
var names ={"Aidan","Grant"}; //需要編譯器做的太多了,所以報錯
可利用C#的隱式類型的數組功能讓編譯器推斷數組元素的類型:
下面代碼沒有在new和[]之間指定類型:
var names = new[]{"Aidan","Grant",null}; //null可轉型為任意參考型別(包括String),所以推斷為String類型
//使用C#的隱式類型的局部變數和隱式類型的數組功能:(錯誤)
var names = new[] {"Adia","Grant",123}; //報錯:找不到隱式類型數組的最佳類型,因為string和int32共同基類是Object,所以不得不建立Object引用的數組,然後對123進行裝箱。C#團隊認為裝箱代價高昂,所以編譯報錯。
“隱式類型的數組”如何與“匿名型別”和“隱式類型的局部變數”組合使用:
//使用C#的隱式類型的局部變數、隱式類型的數組和匿名型別功能:var kids = new[]{new {Name="Aian"},new {Name="Crant"}};
//樣本用法(用了另一個隱式類型的局部變數):foreach(var kid in kids){ Console.WriteLine(kid.Name);}