Lambda表達式

  

返回類型  方法名(參數){方法體}  //普通方法
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();
        }

 

  • 使用Lambda表達式。

進一步的簡化。底層的委託消失的無隱無蹤。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表達式也能夠是一個代碼塊,包含多條語句。泛型

相關文章
相關標籤/搜索