C# 3.0 中對象初始化器(Object Initializers) 和 集合初始化器(Collection Initializers) ,就是簡化我們的代碼,讓本來幾行才能寫完的代碼一行寫完。這樣在LINQ的使用中,我們才不會把一個LINQ運算式寫的巨複雜無比。 由於我看到幾篇講 對象初始化器(Object Initializers)和集合初始化器(Collection Initializers) 的文章,都是一個簡單的例子,一些稍稍特殊一點的情境的初始化賦值並沒有涉及,所以我特整理這篇部落格。 關於對象初始化器(Object Initializers) 的一些問題: 問題一: 對象初始化器允許只給部分值賦值嗎?即不給其中一些值賦值
答案:允許;參考後面的代碼。
問題二:對象初始化器允許給internal 的成員賦值?(私人成員肯定不用想了,肯定不能賦值。)
答案:允許;參考下面的代碼。
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
private int test01 = 25;
internal int test02;
} class Program
{
static void Main(string[] args)
{
Person person = new Person { FirstName = "Scott", LastName = "Guthrie", test02 = 56, };
Console.WriteLine(person.test02);
Console.WriteLine(person.Age);
Console.ReadLine();
} } 問題三:對象初始化器是否可以結合建構函式一起使用? 答案:可以參看如下代碼就可以正常使用: var cookie3 = new System.Net.Cookie("MyCookie", "Jose") { Comment = "a cookie" }; 我們在建構函式中給 Cookie 的名字和值賦了值,在初始化構造器中給 Comment 屬性賦了值。 問題四:建構函式賦值和初始化構造器賦值那個最先被執行? 比如下述代碼,結果是那個呢?? static void Main(string[] args)
{
var cookie = new System.Net.Cookie("MyCookie", "Jose") { Name = "test02", Comment = "a cookie" };
Console.WriteLine(cookie.Name);
Console.ReadLine();
} 答案:
建構函式比初始化構造器更早被執行。
上述WriteLine 寫出來的資訊為:test02
集合初始化器(Collection Initializers) 的一些問題:
問題一:集合初始化構造器中是否可以構造集合的一項為空白值?
答案:可以,參看下述代碼。
問題二:集合初始化構造器是否可以初始化Hashtable ?
答案:可以。這時候相當於用了兩個對象初始化構造器,參看下面代碼:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
private int test01 = 25;
internal int test02;
} class Program
{
static void Main(string[] args)
{
List<Person> people = new List<Person>{
new Person { FirstName = "Scott", LastName = "Guthrie", Age = 32 },
new Person { FirstName = "Bill", LastName = "Gates", test02 = 85},
new Person { FirstName = "Susanne", Age = 32 },
null,
}; Hashtable pp = new Hashtable {
{ 1, new Person { FirstName = "Scott", LastName = "Guthrie", Age = 32 } },
{ 2, new Person { FirstName = "Bill", LastName = "Gates", test02 = 85} },
{ 3, new Person { FirstName = "Susanne", Age = 32 } },
{ 4, null },
}; Console.ReadLine();
}
}