我刚刚在本论坛的一些问题中提到了这种语法,但Google和任何其他搜索引擎都会在搜索中阻止除字母和数字之外的任何内容,因此无法搜索"=>".
那么有谁能告诉我它是什么以及如何使用它?
Jon*_*eet 80
这是lambda运算符.
从C#3到C#5,这仅用于lambda表达式.这些基本上是C#2中引入的匿名方法的较短形式,但也可以转换为表达式树.
举个例子:
Func<Person, string> nameProjection = p => p.Name;
Run Code Online (Sandbox Code Playgroud)
相当于:
Func<Person, string> nameProjection = delegate (Person p) { return p.Name; };
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,您都是使用Person参数创建委托,返回该人的姓名(作为字符串).
在C#6中,相同的语法用于表达式身体成员,例如
// Expression-bodied property
public int IsValid => name != null && id != -1;
// Expression-bodied method
public int GetHashCode() => id.GetHashCode();
Run Code Online (Sandbox Code Playgroud)
也可以看看:
(确实有很多类似的问题 - 试试lambda和lambda-expressions标签.)
Ser*_*gel 15
这意味着很棒.例如
x => x + 1
Run Code Online (Sandbox Code Playgroud)
表示将x作为参数并返回其后继的方法.
button.Click += new EventHandler((sender, e) => methodInfo.Invoke(null, new object[] { sender, e }));
Run Code Online (Sandbox Code Playgroud)
通过调用MethodInfo包含的方法将事件处理程序分配给按钮.
Dav*_*eau 12
它是函数符号的另一种形式.以下大致相同:
// explicit function
int MyFunc(int pParam)
{
return pParam;
}
// delegate function
Func<int, int> MyFunc = delegate(int pParam) { return pParam; };
// lambda expression
Func<int, int> MyFunc = x => x;
Run Code Online (Sandbox Code Playgroud)
想想一个lambda表达式,"给出一些东西,返回一些东西".在上面的例子中,函数x => x说"给定x,返回x".(虽然lambda表达式不一定需要返回某些东西,在这种情况下,你可能会将它们读作"给定x,用x做一些事情".)
这是msdn的一个简单例子
delegate int del(int i);
del myDelegate = x => x * x;
int j = myDelegate(5); //j = 25
Run Code Online (Sandbox Code Playgroud)
=>之前的任何内容都是输入参数,之后的任何内容都是表达式.您可以有多个输入参数.Lambdas主要用于Linq.
而不是像这样使用匿名方法:
somevar.Find(delegate(int n)
{
if(n < 10)
return n;
});
Run Code Online (Sandbox Code Playgroud)
你只需这样写:
somevar.Find(n => n < 10);
Run Code Online (Sandbox Code Playgroud)
它将根据返回值获取数据类型.