【轉】編寫高質量代碼改善C#程序的157個建議——建議150:使用匿名方法、Lambda表達式代替方法
阿新 • • 發佈:2017-12-11
等於 urn lambda表達式 工作 value 語法 eve style 高質量
建議150:使用匿名方法、Lambda表達式代替方法
方法體如果過小(如小於3行),專門為此定義一個方法就會顯得過於繁瑣。比如:
static void SampeMethod() { List<string> list=new List<string>(){"Mike","Rose","Steve"}; var mike = list.Find(new Predicate<string>(HaveLengthFive)); Console.WriteLine(mike); }static bool HaveLengthFive(string value) { return value.Length == 5; }
上面的代碼中,SampleMethod方法需要完成的功能是查看list中有沒有長度等於5的元素。Predicate是一個委托,它接收元素值,並返回元素是否符合要求這一結果。而真正工作的代碼只有1行。有些繁瑣,所以要重構:
static void SampeMethod() { List<string> list=new List<string>(){"Mike","Rose","Steve"}; var mike = list.Find(delegate(string value) { return value.Length == 5; }); Console.WriteLine(mike); }
由delegate引領的語句就是一個匿名方法。其次,匿名方法經過編譯器編譯之後,就和普通方法沒有任何區別了。匿名方法帶來的只是簡化程序員的部分工作而已。
更好的簡化方法就是Lambda表達式。Lambda表達式有符號“=>”連接(讀作“goes to”),符號左邊是參數列表,右邊是方法體。Lambda表達式更進一步簡化了匿名方法的語法:
static void SampeMethod() { List<string> list=new List<string>(){"Mike","Rose","Steve"}; var mike = list.Find(value => value.Length == 5); Console.WriteLine(mike); }
轉自:《編寫高質量代碼改善C#程序的157個建議》陸敏技
【轉】編寫高質量代碼改善C#程序的157個建議——建議150:使用匿名方法、Lambda表達式代替方法