返回類型 方法名(參數){方法體} //普通方法 delegate (參數列表) {方法體} //匿名方法 (參數列表)=>{方法體} //
Lambda表達式的引入是與委託類型的使用密切相關的,本質上,Lambda表達式只是用更簡單的方式來書寫匿名方法,從而完全簡化.NET委託類型的使用。函數
下面用一個例子,展現簡化的過程:spa
eg:找出整數List<T>中的偶數,咱們調用了List<T>類型的FindAll()方法.這個方法須要System.Prediate<T>泛型委託,用於接收類型爲T的輸入參數並返回一個布爾值。code
定義一個單獨的方法。blog
static void Main(string[] args) { List<int> list = new List<int>() { 1,5,10,20,33}; //使用傳統委託語法調用FindAll Predicate<int> callback = new Predicate<int>(IsEvenNumber); List<int> evenNumbers = list.FindAll(callback); foreach (int num in evenNumbers) { Console.Write("{0}\t",num); } Console.ReadLine(); } static bool IsEvenNumber(int i) { return (i % 2) == 0; }
不須要完整的方法定義。string
static void Main(string[] args) { List<int> list = new List<int>() { 1, 5, 10, 20, 33 }; //使用匿名方法 List<int> evenNumbers = list.FindAll( delegate(int i) { return (i % 2 == 0); } ); foreach (var num in evenNumbers) { Console.WriteLine("{0}",num); } Console.ReadLine(); }
進一步的簡化。底層的委託消失的無隱無蹤。it
static void Main(string[] args) { List<int> list = new List<int>() { 1, 5, 10, 20, 33 }; //使用Lambda表達式 List<int> evenNumbers = list.FindAll(i=>(i%2)==0); foreach (var num in evenNumbers) { Console.WriteLine("{0}",num); } Console.ReadLine(); }
Lambda表達式能夠應用與任何匿名方法能夠應用的場合。Lambda表達式的格式:先定義參數列表,=>(可讀爲:goes to)緊隨其後,而後是表達式。即Arguments ToProcess=>Statements ToProess Themclass
Lambda表達式也能夠是一個代碼塊,包含多條語句。泛型