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

时间:2008-11-14 13:24:11

标签: c# syntax

我刚刚在本论坛的一些问题中提到了这种语法,但谷歌和任何其他搜索引擎都会在搜索中阻止除字母和数字之外的任何内容,因此无法搜索“=&gt;”。< / p>

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

8 个答案:

答案 0 :(得分:77)

这是lambda运算符。

从C#3到C#5,这仅用于lambda expressions。这些基本上是C#2中引入的anonymous methods的较短形式,但也可以转换为expression trees

举个例子:

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

相当于:

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

在这两种情况下,您都在创建一个带有Person参数的委托,并返回该人的姓名(作为字符串)。

在C#6中,表达身体成员使用相同的语法,例如

// Expression-bodied property
public int IsValid => name != null && id != -1;

// Expression-bodied method
public int GetHashCode() => id.GetHashCode();

另见:

(确实有很多类似的问题 - 尝试lambdalambda-expressions标签。)

答案 1 :(得分:15)

这意味着很棒。例如,

x => x + 1

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

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

通过调用MethodInfo保存的方法为按钮指定事件处理程序。

答案 2 :(得分:11)

这是功能表示法的另一种形式。以下大致相当:

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

想想一个lambda表达式,“给出一些东西,返回一些东西”。在上面的示例中,函数x => x表示“给定x,返回x”。 (虽然lambda表达式不一定需要返回一些东西,在这种情况下你可能会把它们看作“给定x,用x做一些事情”。)

答案 3 :(得分:9)

这是一个来自msdn

的简单示例
delegate int del(int i);
del myDelegate = x => x * x;
int j = myDelegate(5); //j = 25

=&gt;之前的任何内容是输入参数,后面的任何内容都是表达式。您可以拥有多个输入参数。 Lambda主要与Linq一起使用。

答案 4 :(得分:6)

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

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

你只需这样写:

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

它将根据返回值获取数据类型。

答案 5 :(得分:0)

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

MyObjectReference => MyObjectReference.DoSomething()

通常使用它们将函数作为参数传递给方法,或者在LINQ语句中传递

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

例如。

答案 6 :(得分:0)

它是lambda表达式语法的一部分。 lambda表达式本质上是委托或匿名方法的缩写形式。为了说明,假设我有一个与字母表字母匹配的字符串数组。我可以使用以下LINQ表达式选择包含大于“E”值的数组的成员:

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

“=&gt;”左边的lambda表达式的一部分标识测试的变量名称(设置为字母表中的各个成员)和“=&gt;”右侧的lambda表达式部分识别处理。在这种情况下,处理产生一个布尔值,Where逻辑用于确定字母表中的每个成员是否传递给someLetters数组。

答案 7 :(得分:0)

=> 令牌以两种形式支持:作为成员名称和成员实现的 lambda运算符以及分隔符在表达式主体定义中。

Lambda运算符

在lambda表达式中,lambda运算符=>将左侧的输入变量与右侧的lambda主体分隔开。

以下示例将LINQ功能与方法语法一起使用,以演示lambda表达式的用法:

string[] words = { "bot", "apple", "apricot" };
int minimalLength = words
  .Where(w => w.StartsWith("a"))
  .Min(w => w.Length);
Console.WriteLine(minimalLength);   // output: 5

表达主体定义

表达式主体定义具有以下常规语法:

member => expression;

其中expression是有效的表达式。请注意,仅当成员的返回类型为void或成员是构造函数,终结器或属性集访问器时,表达式才可以是语句表达式。

以下示例显示了Person.ToString方法的表达式主体定义:

public override string ToString() => $"{fname} {lname}".Trim();

这是以下方法定义的简写:

public override string ToString()
{
   return $"{fname} {lname}".Trim();
}