代码改变世界

C#的内置委托,lambda多行方法体

2022-02-23 11:11  Evan.Pei  阅读(105)  评论(0编辑  收藏  举报
//委托,不具有参数和返回值
            //Action C#封装的无参数无返回值的委托
            Action action = () => DateTime.Now.ToString();
            action.Invoke();//同步但现场
            action.BeginInvoke(null, null);//异步多线程

            //委托,具有参数和返回值
            //Func<T> C#封装的有参数有返回值的委托
            Func<int, int, string> fun = (a, b) => DateTime.Now.Day.ToString() + $"{a}+{b}";
            string result = fun.EndInvoke(fun.BeginInvoke(1, 2, null, null));

            //lambda表达式,写一个方法给委托
            Action action2 = () => DateTime.Now.ToString();//()代表无参,"=>"后面写方法体
            //<int, int, string>除了最后一个为返回值类型,前面都是参数可多个
            //(a, b)参数  //$"{a}+{b}" 字符串格式化
            Func<int, int, string> fun2 = (a, b) => DateTime.Now.Day.ToString() + $"{a}+{b}";

            //lambda多行方法体
            Func<int, int, string> fun3 = (aa, bb) =>
            {
                return DateTime.Now.Day.ToString() + $"{aa}+{bb}";
            };
            string result2 = fun3.EndInvoke(fun3.BeginInvoke(20, 30, null, null));//调用接收返回值