意义()=>;C#中的运算符(如果存在)

意义()=>;C#中的运算符(如果存在),c#,.net,delegates,operators,C#,.net,Delegates,Operators,我在Jon Skeet的回答中读到了这句有趣的话 有趣的一行是,他主张使用代表: Log.Info("I did something: {0}", () => action.GenerateDescription()); 问题是,我想知道这个()=>操作符是什么?我试着用谷歌搜索它,但由于它是由符号组成的,谷歌真的帮不了什么忙。我是否尴尬地错过了一些东西?创建指定方法的匿名委托 在您的情况下,它可能是一个Func这引入了一个没有参数的lambda函数(匿名委托),它相当于并且基本上是以下

我在Jon Skeet的回答中读到了这句有趣的话

有趣的一行是,他主张使用代表:

Log.Info("I did something: {0}", () => action.GenerateDescription());

问题是,我想知道这个()=>操作符是什么?我试着用谷歌搜索它,但由于它是由符号组成的,谷歌真的帮不了什么忙。我是否尴尬地错过了一些东西?

创建指定方法的匿名委托


在您的情况下,它可能是一个
Func

这引入了一个没有参数的lambda函数(匿名委托),它相当于并且基本上是以下函数的简写:

delegate void () { return action.GenerateDescription(); }
还可以添加参数,以便:

(a, b) => a + b
这大致相当于:

delegate int (int a, int b) { return a + b; }

这是一个lambda表达式的示例,您可以了解更多信息。

这是一种不带参数的匿名委托作为lambda表达式传递的方法

与.NET2.0中的类似

Log.Info("I did something: {0}", delegate()
            {
                return action.GenerateDescription();
            });

=>
这是lambda操作符。当我们没有任何输入参数时,只需在lambda运算符之前使用圆括号
()

语法:
(输入参数)=>表达式

可能
返回操作。GenerateDescription(),没有?否则错误“无法将void转换为字符串”,类似于that@abatishchev,可能是的。我是从头开始写的,所以我不确定它是否能编译。你能试试吗?如果它会失败,请编辑你的帖子?)比筛选更好的方法是直接找到源代码:注意语法上=>是运算符,()和表达式是它的操作数。这是一个奇怪的操作员;大多数二进制运算符采用两个表达式,而不是参数列表和表达式或块。关于lambda语法和匿名方法语法之间的一些细微差异的系列文章,从这里开始: