C#中數組如何賦值
聲明數組之後,可以立即為其填儲值。方法是在一對大括弧中,使用一個以逗號分隔的資料項目列表。代碼清單2-30聲明了一個字串數組,然後在一對大括弧中指定了9種不同的程式設計語言的名稱。
聲明數組的同時進行賦值
string[] languages = { "C#", "COBOL", "Java",
"C++", "Visual Basic", "Pascal",
"Fortran", "Lisp", "J#"};
在這個以逗號分隔的列表中,第一項成為數組的第一個元素,第二項成為第二個元素,依此類推。我們使用大括弧來定義一個數組字面量。
只有在同一個語句中聲明並賦值時,代碼清單2-30的賦值文法才可用。如果是在聲明了之後才進行賦值,則需要使用new關鍵字和對應的資料類型,如代碼清單2-31所示。
代碼清單2-31 聲明之後再進行數組賦值
string[] languages;
languages = new string[]{"C#", "COBOL", "Java",
"C++", "Visual Basic", "Pascal",
"Fortran", "Lisp", "J#" };
C#還支援將new關鍵字作為聲明語句的一部分使用,所以它允許像代碼清單2-32那樣的賦值和聲明。
代碼清單2-32 聲明的同時使用new進行數組賦值
string[] languages = new string[]{
"C#", "COBOL", "Java",
"C++", "Visual Basic", "Pascal",
"Fortran", "Lisp", "J#"};
使用new關鍵字是告訴“運行時”為資料類型分配記憶體。它指示“運行時”執行個體化資料類型——本例是一個數組。
任何時候將new關鍵字作為數組賦值的一部分使用,都可以同時在方括弧內指定數組的大小。代碼清單2-33示範了這個文法。
代碼清單2-33 使用new關鍵字進行聲明和賦值
string[] languages = new string[9]{
"C#", "COBOL", "Java",
"C++", "Visual Basic", "Pascal",
"Fortran", "Lisp", "J#"};
在初始化語句中,數組的大小和大括弧中包含的元素數量必須匹配。除此之外,也可以分配一個數組,但不指定它的初始值,如代碼清單2-34所示。
代碼清單2-34 分配數組,但不指定初始值
string[] languages = new string[9];
分配一個數組但不指定初始值仍然會初始化每個元素。“運行時”會將每個元素初始化為它們的預設值,如下所示:
參考型別(比如string)初始化為null;
數實值型別初始化為零;
bool初始化為false;
char初始化為\0。
其結果就是,在使用之前,不必單獨對數組的每個元素進行賦值。
在C# 2.0中,可以使用default()運算子來判斷一種資料類型的預設值。default()擷取一個資料類型作為參數。例如,default(int)會返回0,而default(char)會返回\0。
由於數組大小不被作為變數聲明的一部分,所以可以在運行時指定數組大小。例如,代碼清單2-35根據在Console.ReadLine()調用中由使用者指定的大小來建立一個數組。
代碼清單2-35 在運行時定義數組大小
string[] groceryList;
System.Console.Write("How many items on the list? ");
int size = int.Parse(System.Console.ReadLine());
groceryList = new string[size];
// ...
C#採取類似的方式來處理多維陣列。要以逗號分隔每一維上的大小。代碼清單2-36初始化了一個沒有走棋的tic-tac-toe棋盤。
代碼清單2-36 聲明一個二維數組
int[,] cells = int[3,3];
還可以像代碼清單2-37那樣,將一個tic-tac-toe棋盤初始化成特定的棋子布局。
初始化一個二維整數數組
int[,] cells = {
{1, 0, 2},
{1, 2, 0},
{1, 2, 1}
};
初始化採用的模式是一個有3個int[]類型的元素的數組,每個元素都具有相同的大小。在本例中,這個大小是3。注意,每個int[]元素的維必須是完全一致的。也就是說,像代碼清單2-38那樣的聲明是無效的。