C# 3.0 什么是()=>;用C#表示什么意思?

C# 3.0 什么是()=>;用C#表示什么意思?,c#-3.0,C# 3.0,我已经阅读了多年的源代码,遇到了以下单元测试: Assert.Throws<ArgumentOutOfRangeException>(() => Times.AtLeast(0)); Assert.Throws和 有没有人能给我一个简单的问题的答案?搜索“lambda” 具体而言: () => Console.WriteLine("Hi!"); 这意味着“一个不带参数并返回void的方法,当您调用它时,它会将消息写入控制台。” 您可以将其存储在操作变量中: Actio

我已经阅读了多年的源代码,遇到了以下单元测试:

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

有没有人能给我一个简单的问题的答案?

搜索“lambda”

具体而言:

() => Console.WriteLine("Hi!");
这意味着“一个不带参数并返回void的方法,当您调用它时,它会将消息写入控制台。”

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

Action a = () => Console.WriteLine("Hi!");
然后你可以称之为:

a();
我不会用C#编程,但谷歌搜索“C#Lambda”可以回答你的问题

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

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

// prints "Hello Hello "

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

基本上,您的代码段有一个单元测试,可以确保时间。至少(0)抛出ArgumentOutOfRangeException。lambda函数是必要的(而不仅仅是试图直接从Assert.Throws调用Times.AtLeast函数),以便为测试传递正确的参数-在本例中为0

有关此主题的MSDN KB文章如下:

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

=>表示要跟随的代码块


Times.AtLeast(0)调用Times类的静态方法,参数至少为0。

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

n => Times.AtLeast(n)
如果参数的数量不是一个,则需要括号:

(n, m) => Times.AtLeast(n + m)
当参数为零时,空参数列表中会出现括号,语法有些笨拙:

() => Times.AtLeast(0)

不是我,但可能是因为“lambda的搜索堆栈溢出”没有太大帮助,因为OP承认他知道这与lambda有关+但是,在你扩大你最初的答案之前,可能有人投了反对票。不过,现在看看你的答案,肯定很有帮助。@Earwicker:好像你没有足够的代表性::p出于某种原因,我认为你不被允许在你回答的问题上投grub的票。。。。我是从哪里得到这个想法的:PI起初否决了它。“你必须搜索这个和这个”不是一个有用的答案。如果你还链接到搜索和最重要的结果,我认为它是有益的。当然,现在我的否决票被推翻了。那么,基本上,单元测试代码正在创建一个匿名方法,该方法调用一个方法,然后由Throws方法执行,该方法处理抛出的异常并断言抛出了正确的异常?记得我在SQL中查找有关“*=”的信息时。。。不是对搜索引擎最友好的操作员…如果我理解正确,这意味着如果Times.AtLeast(0)为false,则会引发一些异常。我说得对吗?这只在“调试”模式下有效吗?
() => Times.AtLeast(0)