我一直在阅读Moq的源代码,我遇到了以下单元测试:
Assert.Throws<ArgumentOutOfRangeException>(() => Times.AtLeast(0));
对于我的生活,我不记得是什么()=&gt;实际上。我认为它与匿名方法或lambda有关。而且我确定我知道它的作用,我现在还记不住了......
更糟糕的是...... google isn't being much help和neither is stackoverflow
有人可以给我一个很快的回答吗?
答案 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来回答你的问题!!!