什么是'=&燃气轮机';C#mean的语法?

什么是'=&燃气轮机';C#mean的语法?,c#,syntax,C#,Syntax,我刚刚在这个论坛的一些问题中提到了这个语法,但是谷歌和其他搜索引擎倾向于在搜索中屏蔽除了字母和数字以外的任何东西,所以不可能搜索出“=>” 那么有谁能告诉我它是什么以及它是如何使用的呢 是lambda操作符 从C#3到C#5,这只用于。这些基本上是在C#2中引入的一种较短形式,但也可以转换为 例如: Func<Person, string> nameProjection = p => p.Name; 另见: (事实上还有许多类似的问题,请尝试使用和标记。)而不是使用

我刚刚在这个论坛的一些问题中提到了这个语法,但是谷歌和其他搜索引擎倾向于在搜索中屏蔽除了字母和数字以外的任何东西,所以不可能搜索出“=>”


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

是lambda操作符

从C#3到C#5,这只用于。这些基本上是在C#2中引入的一种较短形式,但也可以转换为

例如:

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


(事实上还有许多类似的问题,请尝试使用和标记。)

而不是使用以下匿名方法:

somevar.Find(delegate(int n)
{
   if(n < 10)
      return n;
});
somevar.Find(n => n < 10);
somevar.Find(委托(int n)
{
如果(n<10)
返回n;
});
你可以这样写:

somevar.Find(delegate(int n)
{
   if(n < 10)
      return n;
});
somevar.Find(n => n < 10);
somevar.Find(n=>n<10);
它将采用基于返回值的数据类型。

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

MyObjectReference => MyObjectReference.DoSomething()
通常使用它们将函数作为参数或在LINQ语句中传递到方法中

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

例如。

它的意思是令人敬畏。例如

x => x + 1
表示一个方法,该方法将x作为参数并返回其后继者

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

通过调用MethodInfo保存的方法将事件处理程序分配给按钮。

下面是msdn中的一个简单示例

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

=>前面的任何内容都是输入参数,后面的任何内容都是表达式。您可以有多个输入参数。lambda主要用于Linq。

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

var someLetters=字母表,其中(l=>l>“E”)


“=>”左侧的lambda表达式部分标识测试的变量名(设置为字母表的各个成员),而“=>”右侧的lambda表达式部分标识处理。在这种情况下,处理产生一个布尔值,Where逻辑使用该值来确定字母表的每个成员是否传递到someLetters数组。

这是一种更简洁的方法表示法。以下内容大致相当:

// explicit method
int MyFunc(int pParam) {
   return pParam;
}

// anonymous (name-less) method
// note that the method is "wrapped" up in a hidden object (Delegate) this way
// so there is a very tiny bit of overhead compared to an explicit method
// (though it's really the assignment that causes that and would also happen
// if you assigned an explicit method to a reference)
Func<int, int> MyFunc = delegate (int pParam) { return pParam; };

// lambda expression (also anonymous)
// basically identical to anonymous method,
// except with everything inferred as much as possible, intended to be minimally verbose
Func<int, int> MyFunc = x => x;

// and => is now also used for "expression-bodied" methods
// which let you omit the return keyword and braces if you can evaluate
// to something in one line
int MyFunc(int pParam) =>
   pParam;
将方法(匿名、显式或lambda)分配给引用会导致创建一个隐藏的
委托
包装对象,该对象允许引用该方法。(基本上是一种“托管函数指针”。)

然后,还可以使用
委托
关键字声明命名方法签名

public delegate int TestFunc(int x, int y);

TestFunc myFunc = delegate (int x, int y) { return x + y; };

这声明了一个命名签名
TestFunc
,它接受两个
int
s并返回一个
int
,然后声明该类型的委托引用,然后为其分配一个具有匹配签名的匿名方法。

标记有两种形式支持:作为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;
其中表达式是有效的表达式。请注意,只有当成员的返回类型为void,或者该成员是构造函数、终结器或属性集访问器时,表达式才可以是语句表达式

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

public override string ToString() => $"{fname} {lname}".Trim();
它是以下方法定义的简写版本:

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

可能是重复的,因为问题没有说明被询问的确切案例,也许考虑更新这个答案来包含新的表达体的成员语法,好吗?)刚刚来到这里,因为这个问题被用作重复关闭的目标,所以认为最好有1个答案,而不是在其他情况下寻找不同的答案:如果你要复制和粘贴答案其他网站,至少有一个到的链接。当你为他发布消息来源时,他们为什么会这样做?
public override string ToString()
{
   return $"{fname} {lname}".Trim();
}