物件和集合初始設定式 (C# 程式設計手冊)
更新:2007 年 11 月
物件初始設定式可讓您在建立期間將值指派給物件的任何可存取的欄位或屬性,而不用明確叫用建構函式。下列範例顯示如何使用有具名型別的物件初始設定式。使用 Test 類別中的自動實作屬性時請注意。如需詳細資訊,請參閱自動實作的屬性 (C# 程式設計手冊)。
private class Cat
{
// Auto-implemented properties
public int Age { get; set; }
public string Name { get; set; }
}
static void MethodA()
{
// Object initializer
Cat cat = new Cat { Age = 10, Name = "Sylvester" };
}
具有匿名型別的物件初始設定式
雖然物件初始設定式可以用於任何內容,但是在 LINQ 查詢運算式中特別有用。查詢運算式會頻繁使用匿名型別,該型別只能用物件初始設定式初始化。在 select 子句中,查詢運算式可以將原始序列的物件轉換為具有不同值和形狀的物件。這在您只要儲存序列中每個物件的部分資訊時相當有用。在下列範例中,假設產品物件 (p) 包含許多欄位和方法,而您只對建立包含產品名稱和單價之物件的序列有興趣。
var productInfos =
from p in products
select new { p.ProductName, p.UnitPrice };
執行此查詢時,productInfos 變數會包含物件序列,可以在 foreach 陳述式中存取,如下列範例所示:
foreach(var p in productInfos){...}
新匿名型別中的每個物件都有兩個公用屬性,會接收與原始物件中屬性或欄位相同的名稱。您也可以在建立匿名型別時重新命名欄位,下列範例將 UnitPrice 欄位重新命名為 Price。
select new {p.ProductName, Price = p.UnitPrice};
具有可為 Null 型別的物件初始設定式
這是編譯時期錯誤,用以使用具有可為 Null 型別的集合初始設定式。
集合初始設定式
集合初始設定式可讓您在初始化集合類別時 (該類別實作 IEnumerable),指定一個或多個項目初始設定式。項目初始設定式可以是簡單的值、運算式或物件初始設定式。藉由使用集合初始設定式,您就不需要對來源程式碼中類別的 Add 方法指定多個呼叫,編譯器就會加入呼叫。
下列範例顯示兩個簡單的集合初始設定式:
List<int> digits = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
List<int> digits2 = new List<int> { 0 + 1, 12 % 3, MakeInt() };
下列集合初始設定式使用物件初始設定式,初始化先前範例中定義之 Cat 類別的物件。請注意,每個物件初始設定式會以括號括住並以逗號分隔。
List<Cat> cats = new List<Cat>
{
new Cat(){ Name="Sylvester", Age=8 },
new Cat(){ Name="Whiskers", Age=2},
new Cat() { Name="Sasha", Age=14}
};
如果集合的 Add 方法允許,您可以將 null 指定為集合初始設定式中的項目。
List<Cat> moreCats = new List<Cat>
{
new Cat(){ Name="Furrytail", Age=5 },
new Cat(){ Name="Peaches", Age=4},
null
};