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数组。