C#高级功能(一)Lambda 表达式
2016-06-23 22:20
519 查看
Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数。
通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。
Lambda 表达式对于编写 LINQ 查询表达式特别有用。
若要创建 Lambda 表达式,需要在 Lambda 运算符 => 左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。
例如,lambda 表达式 x => x * x 指定名为 x 的参数并返回 x 的平方值
通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。
Lambda 表达式对于编写 LINQ 查询表达式特别有用。
若要创建 Lambda 表达式,需要在 Lambda 运算符 => 左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。
例如,lambda 表达式 x => x * x 指定名为 x 的参数并返回 x 的平方值
using System; namespace NewAttr { /// <summary> /// Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数。 /// Lambda 表达式对于编写 LINQ 查询表达式特别有用。 /// </summary> public class LambdaDemo { public LambdaDemo() { } /// 委托不能重载,即委托名称相同,参数类型,个数不同。 /// 构造委托的时候,根本不管参数,当然也就不知道你要构造的是哪个委托。 private delegate int del(int x); private delegate int del2(int x, int s); private delegate void del3(); public static void Test() { del myDel1 = x => x * x; del myDel2 = (x) => x * x; del myDel3 = (x) => x * x; del myDel4 = (int x) => x * x; del myDel5 = (int x) => { return x * x; }; Console.WriteLine("del myDel1 = x => x * x :{0}", myDel1(2)); Console.WriteLine("del myDel2 = (x) => x * x :{0}", myDel2(2)); Console.WriteLine("del myDel3 = (x) => x * x :{0}", myDel3(2)); Console.WriteLine("del myDel4 = (int x) => x * x :{0}", myDel4(2)); Console.WriteLine("del muDel5 = (int x) =>{1}:{0}", myDel5(2), " { return x * x; } "); del3 myDel6 = () => Test2(); Console.WriteLine("--------------------------------"); myDel6(); } public static void Test2() { del2 myDel2 = (x, y) => x * y; del2 myDel3 = (int x, int y) => x * y; del2 myDel4 = (int x, int y) => { return x * y; }; Console.WriteLine("del2 myDel2 = (x, y) => x * y :{0}", myDel2(2, 2)); Console.WriteLine("del2 myDel3 = (int x, int y) => x * y :{0}", myDel3(2, 2)); Console.WriteLine("del2 myDel4 = (int x, int y) => {1} :{0}", myDel4(2, 2), "{ return x * y; }"); Console.WriteLine("--------------------------------"); FunTest(); } public static void FunTest() { ///其中 Func 是最多具有十六个输入参数的任何一个 Func 委托 ///之后一个为返回值。 ///Func<TResult>,Func<T,TResult>,Func<T,.....T,TResult> Func<int> myFunc = () => 1; Console.WriteLine("Func<int> myFunc = () => 1 :{0}", myFunc()); Func<int, string, int> myFunc2 = (x, y) => x + y.Length; Console.WriteLine("Func<int, string, int> myFunc = (x, y) => x + y.Length :{0}", myFunc2(1, "jasonhua")); ///其中 Action 是最多具有十六个输入参数的任何一个 Action 委托 Action myAction = () => { Console.WriteLine("Action myAction :1 * 1"); }; myAction(); Action<int, int> myAction2 = (x, y) => { Console.WriteLine("Action<int, int> myAction2 = (x, y) :{0}", x * y); }; myAction2(1,1); } } }
相关文章推荐
- C#窗体截图保存的实现
- Npoi操作excel
- C# 字符串各种变形(个人整理)
- c# Dictionary的遍历和排序(转)
- C#关于控件的上下左右移动
- c#中(int)、int.Parse()、int.TryParse、Convert.ToInt32的区别详解
- 关于.NET编译的目标平台(AnyCPU,x86,x64)
- C#中正则表达式的使用
- 扩展类:类型转换
- C# 图形面积计算
- c# List的排序
- C#之虚函数
- C# EventHandler 委托
- C#中关于DataGridView行和列的背景色-前景色设置
- DataGridView控件使用大全
- c#winform自定义listview,解决listview闪缩问题,添加listview单元格单击事件。
- c# ActiveX 手动申请,释放资源
- C# 拖拽下载实现
- C# 右下角弹出窗口
- c#winform禁用关闭按钮的方法