Lambda与委托
Lambda 表达式是一个可用于创建委托或表达式树类型的匿名函数。
通过使用 lambda 表达式,可以可作为参数 或 返回为函数调用值的本地函数。Lambda 表达式对于编写 LINQ 查询表达式特别有用。
若要创建 Lambda 表达式,必须在 Lambda 运算符 =>(读作goes to) 左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。
例如,
lambda 表达式 x => x * x
指定名为 x 的参数并返回 x 的平方。
您可以按照以下示例将此表达式分配给委托类型:
namespace Lambda { class Program { delegate int del(int intput); static void Main(string[] args) { del myDelegate = x => (x * x); Console.WriteLine(myDelegate(8));//64 } } }
Lambda 表达式
表达式在右边的 Lambda 表达式称为“Lambda 表达式”。 Lambda 表达式返回表达式的结果,并采用以下基本形式:
(input parameters) => expression
注:只有在 Lambda 有一个输入参数时,括号才是可选的;否则括号是必需的。
两个或更多输入参数由括在括号中的逗号分隔:
(x, y) => x == y
有时,编译器难于或无法推断输入类型。如果出现这种情况,您可以按以下示例中所示方式显式指定类型:
(int x, string s) => s.Length > x
使用空括号指定零个输入参数:
() => SomeMethod()
Lambda 语句
Lambda 语句与 Lambda 表达式类似,只是语句括在大括号中:
(input parameters) => {statement;}
class Program { delegate void TestDelegate(string s); static void Main(string[] args) { TestDelegate myDel = n => { string s = n + "...."; Console.WriteLine(s); }; myDel("Ca!"); } }
1. 完整的委托
namespace Lambda { class Program { delegate string Del(string name); static string sayHi(string name) { return "Hi " + name; } static void Main(string[] args) { Del say = new Del(sayHi); Console.WriteLine(sayHi("完整委托")); } } }
2.升级版本--匿名方法
namespace Lambda { class Program { delegate string Del(string name); static void Main(string[] args) { Del sayHi = delegate(string name) { return "Hi " + name; }; Console.WriteLine(sayHi("匿名方法")); } } }
3.升级版本Lambda表达式
namespace Lambda { class Program { delegate string Del(string name); static void Main(string[] args) { Del sayHi = name => { return "Hi " + name; };
Console.WriteLine(sayHi("Lambda表达式")); } } }
4.委托替代--Func 委托 有参数有返回值
namespace Lambda { class Program { static void Main(string[] args) { Func<string, string> sayHi = delegate(string name) { return "Hi " + name; }; Func<string, string> SayHi = name => { return "Hi " + name; }; Console.WriteLine(sayHi(" Func<string, string>匿名委托")); Console.WriteLine(SayHi(" Func<string, string>Lambda委托")); } } }
5.委托替代--Action 委托 有参数无返回值
namespace Lambda { class Program { static void Main(string[] args) { Action<string> sayHi = delegate(string name) { Console.WriteLine("Hi " + name); }; Action<string> SayHi = name => Console.WriteLine("Hi " + name); sayHi("Action<string> sayHi匿名委托"); SayHi("Action<string> SayHi Lambda委托"); } } }
参考:
posted on 2013-12-25 14:05 Aidou_dream 阅读(377) 评论(0) 编辑 收藏 举报