关于c#3.0:()=>

What does () => mean in C#?

我一直在阅读MOQ的源代码,我遇到了以下单元测试:

1
Assert.Throws<ArgumentOutOfRangeException>(() => Times.AtLeast(0));

在我的一生中,我记不起()到底做了什么。我认为这与匿名方法或lambda有关。我肯定我知道它是干什么的,我现在记不起来了……

更糟的是……谷歌没有太多帮助,StackOverflow也没有。

有人能给我一个很正常的问题的快速答案吗?


在StackOverflow中搜索"lambda"。

明确地:

1
() => Console.WriteLine("Hi!");

这意味着"一个不带参数并返回void的方法,当您调用它时,它会将消息写入控制台。"

您可以将其存储在操作变量中:

1
Action a = () => Console.WriteLine("Hi!");

然后你可以称之为:

2


()=>是空lambda表达式。它表示传递给assert.throws的匿名函数,并在该函数内部的某个位置调用。

1
2
3
4
5
6
7
8
void DoThisTwice(Action a) {
    a();
    a();
}
Action printHello = () => Console.Write("Hello");
DoThisTwice(printHello);

// prints"Hello Hello"


它是lambda表达式。最常见的语法是使用参数,因此它周围不需要括号:

1
n => Times.AtLeast(n)

如果参数的数目不是一个,则需要括号:

1
(n, m) => Times.AtLeast(n + m)

当参数为零时,使用空参数列表周围的括号可以得到有点笨拙的语法:

1
() => Times.AtLeast(0)


1
() => Times.AtLeast(0)

()表示lambda函数没有参数或返回值。

=>表示要跟随一个代码块。

Times.Atleast(0)至少使用参数0调用Times类的静态方法。


这是lambda(匿名)函数的定义。本质上,这是一种内联定义函数的方法,因为assert.throws将函数作为参数并尝试运行它(然后验证它是否引发了某个异常)。

基本上,您所拥有的代码片段有一个单元测试来确保时间。至少(0)会抛出ArgumentOutOfRangeException。lambda函数是必要的(而不是仅仅从assert.throws直接调用times.at函数),以便传递测试的正确参数-在本例中为0。

有关此处主题的msdn-kb文章:http://msdn.microsoft.com/en-us/library/bb882516.aspx


我不会用C语言编程,但是谷歌"C"lambda提供了这个链接来回答你的问题!!!!