【轉】編寫高質量代碼改善C#程序的157個建議——建議19:使用更有效的對象和集合初始化
阿新 • • 發佈:2017-11-30
color 有效 void ons ron public 類型 通過 esc
建議19:使用更有效的對象和集合初始化
依賴於屬性和FCL 3.5之後的語法規則,現在我們有了更加簡潔有效的對象和集合初始化機制:對象和集合初始化設定項。
對象初始化:
class Person { public string Name { get; set; } public int Age { get; set; } } class Program { static void Main(string[] args) { Person person = newPerson() {Name = "Mike", Age = 20}; Console.Read(); } }
對象初始化設定項支持在大括號中對自動實現的屬性進行賦值。以往只能依靠構造方法傳值進去,或者在對象構造完畢後對屬性進行賦值。現在這些步驟簡化了,初始化設定項實際上相當於編譯器在對象生成後對屬性進行了賦值。
集合初始化同樣進行了簡化:
List<Person> personList=new List<Person>() { newPerson(){Name = "rose",Age=19}, person, null };
使用集合初始化設定項,編譯器會在集合對象創建完畢後對集合調用Add方法。
上面這段代碼演示了如何在初始化語句中創建一個新對象或一個現有對象,以及一個null值。
不過,初始化設定項不僅僅是為了對象和集合初始化方便,為LINQ查詢返回的集合中匿名類型的屬性都是只讀的,如果需要為匿名類型屬性賦值,或者增加屬性,只能通過初始化設定項來進行。初始化設定項還能為屬性使用表達式。
下面的代碼LINQ查詢中創建了一個新的匿名類型,該類型含有屬性Name和AgeScope,而AgeScope需要通過計算Person的Age屬性得到。
List<Person> personList2 = new List<Person>() { new Person() { Name = "Rose", Age = 19 }, new Person() { Name = "Steve", Age = 45 }, new Person() { Name = "Jessica", Age = 20 }, }; var pTemp = from p in personList2 select new { p.Name, AgeScope = p.Age > 20 ? "Old" : "Young" }; foreach (var item in pTemp) { Console.WriteLine(string.Format("{0}:{1}", item.Name, item.AgeScope)); }
轉自:《編寫高質量代碼改善C#程序的157個建議》陸敏技
【轉】編寫高質量代碼改善C#程序的157個建議——建議19:使用更有效的對象和集合初始化