C# 學習筆記_委託(四)匿名方法與lambda表達式

匿名方法

    class Program
    {

        static int Test1(int arg1, int arg2)
        {
            return arg1 + arg2;
        }  
        static void Main(string[] args)
        {
            Func<int, int, int> plus = Test1;
            //匿名方法形式
            //一般用於回調
            //本質上還一個方法,只是沒有名字,任何使用委託變量的地方都可以使用匿名方法賦值
            Func<int, int, int> plus1 = delegate (int arg1, int arg2)
                {
                    return arg1 + arg2;
                };
        }
    }


lamabda表達式

    class Program
    {
        static void Main(string[] args)
        {
            //Func<int, int, int> plus1 = delegate (int arg1, int arg2)
            //{
            //    return arg1 + arg2;
            //};

            //lambda表達式用來代替匿名方法,所以一個lambda表達式也是定義了一個方法
            //lambda表達式的參數是不需要聲明類型的
            Func<int, int, int> plus1 = (int arg1, int arg2)=>
            {
                return arg1 + arg2;
            };

            //lambda表示的參數只有一個的時候,可以不加上括號,當函數體的語句只有一句的時候,我們可以不加上大括號,也可以不加上Return語句
            //如果lambda表達式的失信代碼中需要多條語句,就必須添加花括號和return語句
            Func<int, int> plus2 = a => a+1;
            Func<int, int> plus3 = a =>
            {
                return a + 1;
            };

            Console.WriteLine(plus1(90, 60));
            Console.WriteLine(plus2(90));
            Console.WriteLine(plus3(90));

            Console.ReadKey();


            //通過lambda表達式可以訪問lambda表達式塊外部的變量。這是一個非常好的功能,但是如果不能正確使用也會很危險。
            int somVal = 5;
            Func<int, int> f = x => x + somVal;
            Console.WriteLine(f(3)); //結果是8
            somVal = 7;
            Console.WriteLine(f(3)); //結果是10

            //這個方法的結果,不但受到參數的控制,還收到somVal變量的控制,結果不可控,容易出現編程問題,用的時候要謹慎。
        }
    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章