【轉】編寫高品質代碼改善C#程式的157個建議——建議37:使用Lambda運算式代替方法和匿名方法

來源:互聯網
上載者:User

標籤:資料   文法   改善   功能   需要   stat   品質   注意   pre   

 

建議37:使用Lambda運算式代替方法和匿名方法

在建議36中,我們建立了這樣一個執行個體程式:

        static void Main(string[] args)        {            Func<int, int, int> add = Add;            Action<string> print = Print;            print(add(1, 2).ToString());        }        static int Add(int i, int j)        {            return i + j;        }        static void Print(string msg)        {            Console.WriteLine(msg);        }

實際上要完成相同的功能,還有很多種編碼方式。先看一種最中規中矩的,也是最繁瑣的寫法:

        static void Main(string[] args)        {            Func<int, int, int> add = new Func<int, int, int>(Add);            Action<string> print = new Action<string>(Print);            print(add(1, 2).ToString());        }        static int Add(int i, int j)        {            return i + j;        }        static void Print(string msg)        {            Console.WriteLine(msg);        }

注意:上面的文法雖然繁瑣,但是我們可以從中加深對委託本質的認識:委託也是一種資料類型,跟任何FCL 中的參考型別沒有差別。

也可以使用匿名方法:

            Func<int,int,int> add=new Func<int, int, int>(delegate(int i, int j)            {                return i + j;            });            Action<string> print=new Action<string>(delegate(string msg)            {                Console.WriteLine(msg);            });

       print(add(1, 2).ToString());

使用匿名方法後,我們就不需要再Main方法外部聲明兩個方法了,可以直接在Main這個工作方法中完成所有代碼編寫,而不會影響代碼清晰性。實際上,所有程式碼數不超過3行的方法(條件是它不被重用),我們都建議採用這種方式來編寫。

上面的改進版本為:

            Func<int,int,int> add=delegate(int i, int j)            {                return i + j;            };            Action<string> print=delegate(string msg)            {                Console.WriteLine(msg);            };

       print(add(1, 2).ToString());

最終改進版本是使用Lambda運算式:

            Func<int,int,int> add= (i, j) => i + j;            Action<string> print= msg => Console.WriteLine(msg);            print(add(1, 2).ToString());

Lambda運算式操作符“=>”的左側是方法的參數,右側是方法體,其本質是匿名方法。實際上,經過編譯後的Lambda運算式就是一個匿名方法。我們應該在實際編碼中熟練運用它,避免出現繁瑣且不美觀的代碼。

 

 

轉自:《編寫高品質代碼改善C#程式的157個建議》陸敏技

 

【轉】編寫高品質代碼改善C#程式的157個建議——建議37:使用Lambda運算式代替方法和匿名方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.