在.NET3.0版本中微軟推出了Lambda表達式。這使代碼的表述可以更加優雅。但是對於新事物大多會本能的排斥,雖然3.0版本已經推出了好久了,但是我向周圍的人了解了一下,用Lambda的人不是很多,即使有可以使用的場合也用舊方法來代替。其實Lambda表達式並不神秘,下面讓我們一起來揭開C# Lambda的面紗。
下面這段簡單的程序是包含了一段Lambda表達式, class Program { delegate string MyDelagate(string val1, string val2); static void Main(string[] args) { MyDelagate my = (param1, param2) => { string test = " 內部變量 "; return param1 + param2 + test; }; Console.WriteLine(my(" 參數1 ", " 參數2 ")); Console.Read(); } } 運行結果如下: 當然這個小例子並沒有體現出Lambda的優勢所在,Lambda的好處會在下一章會介紹。我們先去看看Lambda表達式的本質,正所謂透過現象看本質。現在需要一款反編譯的工具 .net reflector (下載網址:http://115.com/lb/5lbd3lgqkupj) 打開該軟件,將編譯的項目文件用reflector 打開 反編譯的結果和我們寫的基本一致,因為我們選擇了4.0,微軟在3.0的時候已經推出的Lambda表達式。讓我們選擇.NET2.0,然後再進行反編譯,看看會變成什麼樣子。 熟悉不? 這不就是我們所熟悉的匿名方法的寫法嗎。 既然Lambda表達式就是匿名方法寫法的升級,那麼在.net平台還不支持匿名方法的時候,會被反編譯成什麼樣子呢。 我們還原一下程序:這是用一個委托,調用了一個方法,方法返回了三個變量拼接的字符串。 這段程序和之前的Lambda表達式實現的功能是一致的。 class Class2 { private delegate string MyDelagate(string val1, string val2); static void Main(string[] args) { MyDelagate my = new MyDelagate(Method); Console.WriteLine(my(" 參數1 ", " 參數2 ")); Console.Read(); return; } private static string Method(string param1, string param2) { string test = " 內部變量 "; return (param1 + param2 + test); } } 通過上述的分析我們已經揭開了Lambda的面紗,同時也揭開了Lambda的發展歷程。 1.在.net1.0的時候,我們在程序中只能通過方法調用來實現功能 2.或者通過定義委托來進行方法調用 3.在.net2.0中支持了匿名委托,所以可以通過編寫匿名方法來實現功能。 4.在.net3.0中推出了Lambda表達式,它讓我們在實現功能的同時,美化了代碼結構。