今天就跟大家聊聊有关C#中Lambda表达式的作用是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
1. Lamdba 表达式是一个委托类型:
MethodInvoker invoker = () => { Console.WriteLine(); }; //is actually equal to the following form. MethodInvoker invoker = delegate() { Console.WriteLine(); }; //这里是Lamdba 表达式的匿名委托的用法
2. Lamdba 表达式可以用作匿名方法
MethodInvoker invoker = new MethodInvoker(() => { Console.WriteLine(); }); //相当于: MethodInvoker invoker = new MethodInvoker(MyFunc); partial void MyFunc() { Console.WriteLine(); }
我们知道, 当构造一个新的委托的时候, 他的构造器需要一个函数指针作参数,这个函数指针是委托类型的
实际上,当我们这样去new 一个委托的时候:
MethodInvoker invoker = new MethodInvoker(MyFunc);
"MyFunc" 就是一个委托,而不只是一个函数名的存在. 编译器将为这个构造函数生成一个匿名委托:
MethodInvoker invoker = new MethodInvoker(delegate() { MyFunc(); });
可以这样理解编译器的行为: 匿名方法其实也就是委托。
那么为什么我们可以这么写呢:
MethodInvoker invoker = () => { Console.WriteLine(); };
我们来看一看:
首先,这个委托的构造器需要一个委托参数,所以通常我们得这样写:
MethodInvoker invoker = new MethodInvoker(delegate() { MyFunc(); });
但是匿名的delegate 可以转化成函数指针 (void() target):
所以这样写是可以的:
MethodInvoker invoker = new MethodInvoker(MyFunc); //而匿名的委托又可以描述为Lambda表达式 MethodInvoker invoker = new MethodInvoker(() => { Console.WriteLine(); }); //另外一方面,由于编译器对"宽松委托"的支持, MethodInvoker类委托可以转化成匿名类委托: MethodInvoker invoker = delegate() { Console.WriteLine(); }; //而匿名的委托又可以用Lambda表达式来描述 MethodInvoker invoker = () => { Console.WriteLine(); };
从上面,我们可以看到一个复杂的委托是如何转化成简洁的Lambda表达式的。这对程序员来说无疑又是提高生产力的一个体现!
看完上述内容,你们对C#中Lambda表达式的作用是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。