您好,登錄后才能下訂單哦!
這篇文章給大家介紹C#3.0中Lambda表達式如何使用,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
Lambda表達式
Lambda 表達式是一個匿名函數,它可以包含表達式和語句,并且可用于創建委托或表達式目錄樹類型。所有 Lambda 表達式都使用 Lambda 運算符 =>。關于Lambda更詳細的講解大家可以參看 MSDN。里面說的很清楚。
這里簡單舉個例子來說明Lambda的好處。Lambda在對匿名委托的處理上提供了更清楚的實施方式。例如在2.0中。我們可以寫這樣的代碼:
Code public class Example { public static void Demo(System.Windows.Controls.TextBlock outputBlock) { Func convert = delegate(string s) { return s.ToUpper(); }; string name = "Dakota"; outputBlock.Text += convert(name) + "\n"; } }
在 C# 中將 Func<(Of <(T, TResult>)>) 委托與匿名方法一起使用。
在3.0中,我們可以使用Lambda來更清楚的進行參數的傳遞:
Code public class Example { public static void Demo(System.Windows.Controls.TextBlock outputBlock) { Func convert = s => s.ToUpper(); string name = "Dakota"; outputBlock.Text += convert(name) + "\n"; } }
Lambda 表達式的基礎類型是泛型 Func 委托之一。這樣能以參數形式傳遞 lambda 表達式,而不用顯式將其分配給委托。尤其是,因為 System.Linq 命名空間中許多類型方法具有 Func<(Of <(T, TResult>)>) 參數,因此可以給這些方法傳遞 lambda 表達式,而不用顯式實例化 Func<(Of <(T, TResult>)>) 委托。這樣可以使我們的代碼更加簡潔,邏輯上更易于理解。
對象的初始化
在C#中,對象的初始化也做了一些改進。一個新的功能就是提供了更方便的語法規則來聲明變量的值。
假如我們聲明一個Student對象:
Code public class Student { private string _stuName; private string _stuAge; private int _stuClass; public Student() { } public string StuName { get { return _stuName; } set { _stuName = value; } } public string StuAge { get { return _stuAge; } set { _stuAge = value; } } public int StuClass { get { return _stuClass; } set { _stuClass = value; } } }
在C#2.0中,我們是這樣聲明變量并賦值的:
Student stu = new Student(); stu.StuName = "Brian"; stu.StuAge = "21"; stu.StuClass = "1班";
而在C#3.0中,我們可以這樣初始化對象:
Student stu2 = new Student { StuName = "Brian", StuAge = "21", StuClass = "1班" };
從代碼中不難看出,C#3.0給我們提供了很方便得方式來進行對象的初始化工作。
查詢
這個想必大家都應該有所耳聞,那就是鼎鼎大名的Linq。這是C#3.0中最獨特好用的新特性之一。Linq改變了我們寫數據應用程序的方式,先前,開發人員需要考慮并編寫不用的代碼來處理不同數據源中的數據(SQL Server ,XML ,Memory....)。LINQ很好的幫我們解決了這個煩人的問題。同時借助Lambda,我們可以更方便準確的查詢我們想要的數據。
使用Linq簡單的數據查詢例子:
Code private void BindGridView(string criteria) { string strConn = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString; NorthwindDb db = new NorthwindDb(strConn); IEnumerable results; if (criteria == string.Empty) { results=db.Employee.ToArray(); } else { results = (from c in db.Employee where c.FirstName.Contains(criteria) select c).ToArray(); } GridView1.DataSource = results; GridView1.DataBind(); }
變量聲明
這里要說的是var。var是C#3.0中提供的用于聲明變量的關鍵字,開發人員可以不考慮變量的類型就可以對變量進行聲明(這一點用法非常類似Javascript)。但是兩者還是有些差異。
相同點:用var來聲明任何類型的局部變量。
不同點:它僅僅負責告訴編譯器,該變量需要根據初始化表達式來推斷變量的類型,而且只能是局部變量。
我們可以這樣聲明變量:
var i= 10; var name = "edisundong"; var numbers = new int[] { 1, 2, 3 };
var僅僅是個關鍵字,它并不是C#3.0中的一種新的類型,而是負責告訴編譯器,該變量需要根據初始化表達式來推斷變量的類型,上面的語句相當于
int i= 10; string name = " edisundong "; int[] numbers = new int[] { 1, 2, 3 };
這里還需要注意幾點:
1.在聲明時必須同時賦值。
2.在使用var聲明一個局部變量后,他仍然具備強類型。
var integer = 10; integer = " edisundong ";
編譯時會報Cannot implicitly convert type string to int錯誤。
3. 初始化器表達式的編譯期類型不能夠是空(null)類型。
4. var的聲明僅限于局部變量
擴展方法
以前如果我們想擴展一個類的功能必須直接源自于它并且從學其中的方法,在C#3.0中,介紹了一種很快捷的擴展功能的方法。
Code public static class StudentExtensionMethods { public StudentExtensionMethods() { // //TODO: 在此處添加構造函數邏輯 // } public static string GetStudentInformation(this Student stu) { return string.Format("Name: {0} {1} Age: {2}", stu.StuName, stu.StuAge, stu.StuClass); } }
定義一個類,其中定義一個方法,注意:這個類和方法都是static的,并且方法的參數是類Student。這樣,Student類就可以擴展GetStudentInformation方法:
Code Student stu2 = new Student { StuName = "Brian", StuAge = "12", StuClass = "1班" }; Console.WriteLine(stu2.GetPersonInformation());
關于C#3.0中Lambda表達式如何使用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。