C#進階之路-lambda表達式(筆記6)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Learn
{
    public delegate void NoReturnNopara();//1、聲明委託
    public delegate void NoReturnWithPara(string name, DateTime now);
    public delegate string WithReturnNoPara();
    public delegate int WithReturnWithPara(int x, int y);
    class lambdaShowcs
    {
        public static void Show()
        {
            NoReturnWithPara method = new NoReturnWithPara(Study);//實例化委託
            method.Invoke("我愛西南", DateTime.Now);

            NoReturnWithPara method1 = new NoReturnWithPara(
                delegate(string name, DateTime now)
             {
                 Console.WriteLine("{0}{1}正在學習lambda表達式", name, now);
             });//匿名方法、去掉方法
            method1.Invoke("我愛西南", DateTime.Now);

            NoReturnWithPara method2 = new NoReturnWithPara(
                (string name, DateTime now)=>
               {
                   Console.WriteLine("{0}{1}正在學習lambda表達式", name, now);
               });//lambda表達式,吧delegate換成=> 箭頭左邊是參數列表,右邊是方法體
            method2.Invoke("我愛西南", DateTime.Now);
            //lambda表達式是什麼?
            //lambda就是一個方法(匿名方法)、這是本質
            //
            //

            NoReturnWithPara method3 = new NoReturnWithPara(
               (name,now) =>
               {
                   Console.WriteLine("{0}{1}正在學習lambda表達式", name, now);
               });//去掉參數類型聲明、因爲實力話委託的傳入方法必須滿足委託的約束
            method3.Invoke("我愛西南", DateTime.Now);

            NoReturnWithPara method4=(name, now) =>
               {
                   Console.WriteLine("{0}{1}正在學習lambda表達式", name, now);
               };// 去掉new NoReturnWithPara
            method4.Invoke("我愛西南", DateTime.Now);

            NoReturnWithPara method5 = (name, now) =>
                Console.WriteLine("{0}{1}正在學習lambda表達式", name, now);
            // 去掉大括號,方法體只有行的時候纔可也去掉
            method4.Invoke("我愛西南", DateTime.Now);


            NoReturnWithPara method10 = (s, d) => Console.WriteLine("{0}{1}",s,d);//lamda表達式
            method10.Invoke("我愛西南", DateTime.Now);


            WithReturnWithPara fuc = (x, y) => { return x + y; };//待返回值的lambda
            fuc.Invoke(1,2);//調用
            //進一步優化、如果方法體只有只有一行,{}和retun都可也去掉
            WithReturnWithPara fuc1 = (x, y) => x + y;

            NoReturnNopara action = () => { };//表示無參數、方法體爲空
            NoReturnNopara action1 = () => { Console.WriteLine("1231"); };

            WithReturnNoPara fun2 = () => "返回值";//無參數返回值


            //委託用action和Func關鍵字、無需在單獨聲明委託
            Action act1 = () => { };
            //一個參數可也去掉小括號
            Action<string> act2 = s => { };//泛型委託,接受一個參數。無返回值
            //最多可也有16個參數,不帶返回值
            Action<string, long, int, DateTime, Action> act4 = (s, y, z, w,h) => { };

            Func<string> fun1 = () => "dddd";//無參數帶返回值。返回值是字符串
            Func<DateTime> func2 = () => DateTime.Now;
            //接受三個參數,返回一個值。返回值爲action
            Func<int, DateTime, string,Action> func3 = (q, w, z) => act1;


        }
        public static void LinqShow()
        {
            ///lmbda的應用
            List<int> intList = new List<int>();//定義一個int list集合
            for (var i=0; i < 100; i++)
            {
                intList.Add(i);
            }
            foreach (int i in intList.Where(num => num > 55))
            {
                Console.WriteLine(i);
            }

        }
        private static void Study(string name, DateTime now)
        {
            Console.WriteLine("{0}{1}正在學習lambda表達式",name,now);
        }
    }
}

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