什么是 "=>" 的意思?

13

如果我说的很新手,请原谅,=>在C#中是什么意思?上周我参加了一个演示,这个运算符(我想)是在ORM的上下文中使用的。在回看我的笔记之前,我并没有真正注意到语法的细节。


这是一个重复的。我找不到一个不是重复的。 - Daniel A. White
这个很难搜索到,即使在谷歌上也是如此。 - Brian Liang
他不知道它被称为“lambda运算符”。 - Richard Anthony Freeman-Hein
7个回答

13

C#中的lambda运算符写作"=>"(通常在朗读时发音为“goes to”)。它意味着左侧的参数被传递到右侧的代码块(lambda函数/匿名委托)中。

因此,如果你有一个Func或Action(或其具有更多类型参数的任何衍生姊妹类),则可以将lambda表达式分配给它们,而不需要实例化委托或拥有一个用于延迟处理的单独方法:

//creates a Func that can be called later
Func<int,bool> f = i => i <= 10;
//calls the function with 12 substituted as the parameter
bool ret = f(12);

4
我以前从未注意到把 lambda 和“小于或等于”结合起来有多么令人困惑。结果看起来就像所有箭头都指向 i。 - Will Eddins

8

由于还没有人提到它,在VB.NET中,您需要使用函数关键字而不是=>,如下所示:

dim func = function() true
'or
dim func1 = function(x, y) x + y

dim result = func() ' result is True
dim result1 = func1(5, 2) ' result is 7

1
我又因无缘无故被投票否决了。那个提问的人说他是VB.NET的人,所以用VB.NET的术语来解释是有意义的。 - Richard Anthony Freeman-Hein
你没有回答他的具体问题,但我不明白为什么给他一些可能有助于更好地理解的信息会导致负评。+1 来抵消它。 - Brandon
+1,我也正要添加这个答案... 真是疯狂,有人会踩它,对于一个VB.NET的人来说,这非常有用... - Meta-Knight
谢谢大家取消了我的踩。我不想重复之前的回答来解释它叫什么,但下次我会先回答具体问题,然后再添加任何可能有帮助的额外信息。 - Richard Anthony Freeman-Hein
+1 表示团结一致 - 在我看来,没有注释的负面评价毫无帮助且毫无意义。 - Gordon Mackie JoanMiro

7

这是声明lambda的速记方式。

i => i++

这里的“(有点)类似于编写”:

delegate(int i)
{
    i++;
}

在以下背景下:

void DoSomething(Action<int> doSomething)
{
    doSomething(1);
}

DoSomething(delegate(int i) { i++; });
//declares an anonymous method
//and passes it to DoSomething

这有点类似于编写以下代码:

void increment(int i)
{
    i++;
}

不给函数命名,它允许您在一行内声明一个函数,称为“匿名”函数。


3

当读出来时,操作符是lambda(转到)操作符,它有助于定义您在lambda中定义的匿名委托。

常见的使用场景是事件处理程序。您通常会有一个由以下代码处理的页面加载类型事件的lambda:

this.Loaded += (o, e) => { 

// code

}

您使用了一个匿名方法(没有名称)来处理Loaded事件,使用了lambda表达式。它的含义是"o, e执行...方法定义中的foo"。

3
这是“lambda运算符”,读作“进入”。假设您有以下语句:
doSomething(x => x + " hi");

您可以将“=>”在您的脑海中替换为以下内容:
doSomething(delegate (string x) { return x + " hi" });

正如你所看到的,它提供了一种非常简洁的方式。编译器会确定你传递的变量的类型,并允许你摆脱函数签名和括号,将代码传递给签名变量。


1
我听说过“injects”、“arrows”、一些我不想在这里提到的粗俗词汇,还有其他几个。到目前为止,我最喜欢的是“equals greaterthan'd”。 - womp
2
我现在只说“lambda”,而不用担心无数可能的变化。 - Richard Anthony Freeman-Hein

1

这是一个lambda运算符,是lambda表达式的一部分。

所有的lambda表达式都使用lambda运算符=>,它被读作“goes to”。lambda运算符的左侧指定输入参数(如果有),右侧包含表达式或语句块。lambda表达式x => x * x被读作“x goes to x times x”。


1

声明匿名函数的语法,在C#中被称为“lambda表达式”。

例如,(int p) => p * 2 表示一个函数,它接受一个整数并将其乘以二。


从技术上讲,整个函数体(int p) => p *2是一个lambda表达式。=>只是lambda运算符。 - Richard Anthony Freeman-Hein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接