什么()=>在C#中意味着什么?

时间:2009-08-01 06:52:24

标签: c#-3.0

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

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

对于我的生活,我不记得是什么()=&gt;实际上。我认为它与匿名方法或lambda有关。而且我确定我知道它的作用,我现在还记不住了......

更糟糕的是...... google isn't being much helpneither is stackoverflow

有人可以给我一个很快的回答吗?

6 个答案:

答案 0 :(得分:13)

在StackOverflow中搜索“lambda”。

具体做法是:

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

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

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

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

然后你可以称之为:

a();

答案 1 :(得分:12)

()=&GT;是一个nullary lambda表达式。它表示一个传递给assert.Throws的匿名函数,并在该函数内部的某处调用。

void DoThisTwice(Action a) { 
    a();
    a();
}
Action printHello = () => Console.Write("Hello ");
DoThisTwice(printHello);

// prints "Hello Hello "

答案 2 :(得分:9)

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

n => Times.AtLeast(n)

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

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

如果参数为零,则会在空参数列表周围使用括号获得稍微笨拙的语法:

() => Times.AtLeast(0)

答案 3 :(得分:4)

() => Times.AtLeast(0)

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

=&GT;表示要遵循一段代码。

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

答案 4 :(得分:2)

这是lambda(匿名)函数的定义。从本质上讲,它是一种定义内联函数的方法,因为Assert.Throws将一个函数作为参数并尝试运行它(然后验证它是否会抛出某个异常)。

基本上,你在那里的代码片段是一个单元测试,它确保Times.AtLeast(0)抛出ArgumentOutOfRangeException。 lambda函数是必要的(而不是仅仅尝试直接从Assert.Throws调用Times.AtLeast函数),以便为测试传递正确的参数 - 在本例中为0。

关于此主题的MSDN知识库文章:http://msdn.microsoft.com/en-us/library/bb882516.aspx

答案 5 :(得分:0)

我没有用C#编程,但谷歌搜索“C#Lambda”提供了this link来回答你的问题!!!