C#中的'=>'语法是什么意思?

我刚刚在这个论坛的一些问题中谈到了这个语法,但Google和其他任何一个search引擎都会在search中阻止任何字母和数字,所以search出“=>”是不可能的。

那么谁能告诉我它是什么以及它是如何使用的?

这是lambda运算符。

从C#3到C#5,这只用于lambdaexpression式 。 这些基本上是C#2中引入的匿名方法的简短forms,但也可以转换为expression式树 。

举个例子:

Func<Person, string> nameProjection = p => p.Name; 

相当于:

 Func<Person, string> nameProjection = delegate (Person p) { return p.Name; }; 

在这两种情况下,你都要用Person参数创build一个委托,返回这个人的名字(作为一个string)。

在C#6中,对expression式成员使用相同的语法,例如

 // Expression-bodied property public int IsValid => name != null && id != -1; // Expression-bodied method public int GetHashCode() => id.GetHashCode(); 

也可以看看:

  • 匿名方法(C#2.0)和lambdaexpression式(C#3.0)之间有什么区别?
  • 什么是Lambda?
  • C#Lambdaexpression式,为什么我应该使用这个?

(事实上​​很多类似的问题 – 试试lambda和lambdaexpression式标签。)

这意味着很棒。 例如

 x => x + 1 

表示一个以x为参数并返回它的后继的方法。

 button.Click += new EventHandler((sender, e) => methodInfo.Invoke(null, new object[] { sender, e })); 

通过调用一个MethodInfo持有的方法来为button分配一个事件处理程序。

这里是msdn的一个简单例子

 delegate int del(int i); del myDelegate = x => x * x; int j = myDelegate(5); //j = 25 

在=>之前的任何东西都是input参数,后面的任何东西都是expression式。 你可以有多个input参数。 Lambdas主要与Linq一起使用。

这是函数表示法的另一种forms。 以下几乎相同:

 // 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; 

想想一个lambdaexpression式就是这样说的:“给出一些东西,返回一些东西”。 在上面的例子中,函数x => x表示“给定x,返回x”。 (虽然lambdaexpression式不一定需要返回某些东西,但是在这种情况下,您可能会将它们读作“给定x,使用x做某事”)。

而不是像这样使用匿名方法:

 somevar.Find(delegate(int n) { if(n < 10) return n; }); 

你可以这样写:

 somevar.Find(n => n < 10); 

它将根据返回值取数据types。

它基本上意味着“进入”,就像一个参数

 MyObjectReference => MyObjectReference.DoSomething() 

通常你使用它们将函数作为parameter passing给方法,或者在LINQ语句中使用

 MyCollection.Where(myobj => myobj.Age>10) 

例如。

它是lambdaexpression式语法的一部分。 lambdaexpression式本质上是委托或匿名方法的缩写forms。 为了说明,假设我有一个匹配字母表的字母的string数组。 我可以用下面的LINQexpression式来挑出包含大于“E”值的数组成员:

var someLetters = alphabet.Where(l => l>“E”);

“=>”左边的lambdaexpression式的部分标识了testing的variables名(它被设置为字母表的各个成员),而lambdaexpression式的部分标识为“=>”标识处理。 在这种情况下,处理产生一个布尔值,Where逻辑用来确定每个字母表的成员是否传递给someLetters数组。