C#匿名函数之匿名方法与lambda表达式
2015-07-18 23:21
465 查看
匿名函数是一个“内联”语句或表达式,可在需要委托类型的任何地方使用。 可以使用匿名函数来初始化命名委托,或传递命名委托(而不是命名委托类型)作为方法参数。
共有两种匿名函数:
.匿名方法
.lambda表达式
下面示例如何使用:
result ,result2 , result3的结果都为16;
匿名方法:
例:
通过使用匿名方法,由于您不必创建单独的方法,因此减少了实例化委托所需的编码系统开销。
lambda 表达式:
通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。
表达式位于 => 运算符右侧的 lambda 表达式称为“表达式 lambda”。 表达式 lambda 会返回表达式的结果,并采用以下基本形式:
(input parameters) => expression
仅当 lambda 只有一个输入参数时,括号才是可选的;否则括号是必需的。 括号内的两个或更多输入参数使用逗号加以分隔:
有时,编译器难以或无法推断输入类型。 如果出现这种情况,你可以按以下示例中所示方式显式指定类型:
使用空括号指定零个输入参数:
参考:
https://msdn.microsoft.com/zh-cn/library/bb882516.aspx
https://msdn.microsoft.com/zh-cn/library/0yw3tz5k.aspx
https://msdn.microsoft.com/zh-cn/library/bb397687.aspx
共有两种匿名函数:
.匿名方法
.lambda表达式
下面示例如何使用:
public class Test{ delegate int Add(int a , int b); static int MyAdd(int a , int b){ return a + b; } static void Main(string[] args){ //普通委托 Add ad = MyAdd; int result = ad (8, 8); //匿名方法 Add ad2 =delegate(int a , int b) { return a + b; }; int result2 = ad2 (8, 8); //lambda表达式 Add ad3= (a , b) => {return a + b;};//或 (a , b) => a + b; int result3 = ad3 (8, 8); } }
result ,result2 , result3的结果都为16;
匿名方法:
例:
delegate int Add(int a , int b); Add ad = delegate(int a , int b){/*......*/};
delegate void ShowName(); ShowName sn = delegate(){/*...*/};
通过使用匿名方法,由于您不必创建单独的方法,因此减少了实例化委托所需的编码系统开销。
lambda 表达式:
通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。
表达式位于 => 运算符右侧的 lambda 表达式称为“表达式 lambda”。 表达式 lambda 会返回表达式的结果,并采用以下基本形式:
(input parameters) => expression
仅当 lambda 只有一个输入参数时,括号才是可选的;否则括号是必需的。 括号内的两个或更多输入参数使用逗号加以分隔:
(x, y) => x == y
有时,编译器难以或无法推断输入类型。 如果出现这种情况,你可以按以下示例中所示方式显式指定类型:
(int x, string s) => s.Length > x
使用空括号指定零个输入参数:
() => SomeMethod()
参考:
https://msdn.microsoft.com/zh-cn/library/bb882516.aspx
https://msdn.microsoft.com/zh-cn/library/0yw3tz5k.aspx
https://msdn.microsoft.com/zh-cn/library/bb397687.aspx
相关文章推荐
- c# winform:当子窗体关闭时,更新父窗体DataGridView控件的值
- 运用C#读取导入的Excel部分数据为空的解决方法
- C#获取当前函数名称
- C# char 和string之间转换
- C# Action和Func
- C# WinForm 关闭登陆窗体,打开主窗体的实现
- C#记录消息到日志文件的方法
- c# 调用外部exe程序
- C#版七层登陆
- 【转】C# WinForm窗体及其控件的自适应
- c# XML和实体类之间相互转换(序列化和反序列化)
- C#类的扩展
- C#异步调用的好处和方法
- C# 中的委托和事件
- C#泛型详解
- C#参数类型 params、out和ref
- 在C#中ParameterizedThreadStart和ThreadStart区别
- C#不定参数函数
- C#中Invoke的用法(转)
- C#中Thread.IsBackground 属性