1. 程式人生 > >【轉】編寫高質量代碼改善C#程序的157個建議——建議150:使用匿名方法、Lambda表達式代替方法

【轉】編寫高質量代碼改善C#程序的157個建議——建議150:使用匿名方法、Lambda表達式代替方法

等於 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表達式代替方法