C#中的()=>是什么意思?

mez*_*oid 10 c#-3.0

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

Assert.Throws<ArgumentOutOfRangeException>(() => Times.AtLeast(0));
Run Code Online (Sandbox Code Playgroud)

而对于我的生活,我不记得究竟是什么()=>.我认为它与匿名方法或lambda有关.而且我确定我知道它的作用,我现在还记不清了......

更糟糕的是...... 谷歌没有太多的帮助,也没有堆栈溢出

有人能给我一个快速回答一个漂亮的noobish问题吗?

Dan*_*ker 13

在"lambda"中搜索StackOverflow.

特别:

() => Console.WriteLine("Hi!");
Run Code Online (Sandbox Code Playgroud)

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

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

Action a = () => Console.WriteLine("Hi!");
Run Code Online (Sandbox Code Playgroud)

然后你可以称之为:

a();
Run Code Online (Sandbox Code Playgroud)


Jim*_*mmy 12

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

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

// prints "Hello Hello "
Run Code Online (Sandbox Code Playgroud)


Guf*_*ffa 9

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

n => Times.AtLeast(n)
Run Code Online (Sandbox Code Playgroud)

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

(n, m) => Times.AtLeast(n + m)
Run Code Online (Sandbox Code Playgroud)

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

() => Times.AtLeast(0)
Run Code Online (Sandbox Code Playgroud)