| 對象初始化器 | ??? public class Person ??? { ??????? public string username { get; set; } ??????? public int age { get; set; } ??????? ??????? public override string ToString() ??????? { ??? ??? return string.Format("username:{0} age:{1}", this.username, this.age); ??????? } } ? Person p = new Person() {username = "zhuye", age=26}; Console.WriteLine(p.ToString()); ? |
?????? 編譯器會自動為你做setter操作,使得原本幾行的屬性賦值操作能在一行中完成。這里需要注意: l???????? 允許只給一部分屬性賦值,包括internal訪問級別 l???????? 可以結(jié)合構(gòu)造函數(shù)一起使用,并且構(gòu)造函數(shù)初始化先于對象初始化器執(zhí)行 集合初始化器 | ??? public class Person ??? { ??????? public string username { get; set; } ??????? public int age { get; set; } ??????? ??????? public override string ToString() ??????? { ??? ??? return string.Format("username:{0} age:{1}", this.username, this.age); ??????? } } ? var persons = new List<Person> { ??? new Person {username = "a", age=1}, ??? new Person {username = "b", age=2}}; foreach(var p in persons) Console.WriteLine(p.ToString()); ? |
編譯器會自動為你做集合插入操作。如果你為Hashtable初始化的話就相當(dāng)于使用了兩個對象初始化器。 Lambda表達(dá)式 | var list = new [] { "aa", "bb", "ac" }; var result = Array.FindAll(list, s => (s.IndexOf("a") > -1)); foreach (var v in result) Console.WriteLine(v); ? |
?????? 其實和2.0中的匿名方法差不多,都是用于產(chǎn)生內(nèi)聯(lián)方法,只不過Lambda表達(dá)式的語法更為簡潔。語法如下: ?????? (參數(shù)列表) => 表達(dá)式或者語句塊 其中: 參數(shù)個數(shù):可以有多個參數(shù),一個參數(shù),或者無參數(shù)。 表達(dá)式或者語句塊:這部分就是我們平常寫函數(shù)的實現(xiàn)部分(函數(shù)體)。 ?????? 前面的示例分別是1個參數(shù)的例子,下面結(jié)合擴(kuò)展方法來一個復(fù)雜的例子: | ????? public delegate int mydg(int a, int b); ???? ????? public static class LambdaTest ????? { ????????? ????????? public static int oper(this int a, int b, mydg dg) ????????? { ????????????? return dg(a, b); ????????? } ????? } ? Console.WriteLine(1.oper(2, (a, b) => a + b)); Console.WriteLine(2.oper(1, (a, b) => a - b)); ? |
查詢句法 | var persons = new List<Person> { ??? new Person {username = "a", age=19}, ??? new Person {username = "b", age=20}, ??? new Person {username = "a", age=21}, ??? }; var selectperson = from p in persons where p.age >= 20 select p.username.ToUpper(); foreach(var p in selectperson) ??? Console.WriteLine(p); ? |
查詢句法是使用標(biāo)準(zhǔn)的LINQ查詢運算符來表達(dá)查詢時一個方便的聲明式簡化寫法。 該句法能在代碼里表達(dá)查詢時增進(jìn)可讀性和簡潔性,讀起來容易,也容易讓人寫對。 ?Visual Studio 對查詢句法提供了完整的智能感應(yīng)和編譯時檢查支持。 編譯器在底層把查詢句法的表達(dá)式翻譯成明確的方法調(diào)用代碼, 代碼通過新的擴(kuò)展方法和Lambda表達(dá)式語言特性來實現(xiàn)。上面的查詢句法等價于下面的代碼: | var selectperson = persons.Where(p=>p.age>=20).Select(p=>p.username.ToUpper()); |
LINQ查詢句法可以實現(xiàn)90%以上T-SQL的功能(由于T-SQL是基于二維表的, 所以LINQ的查詢語法會比T-SQL更簡單和靈活),但是由于智能感應(yīng)的原因,select不能放在一開始就輸入。 |