[英]C# expressions syntax shorthand
据我了解,我可以使用这个:
Func<string> f1 = () => DateTime.Now.ToString();
作为简写:
Func<string> f2 = () => { return DateTime.Now.ToString(); };
我的问题是为什么我不能用表达式做同样的事情:
Expression<Func<string>> exp1 = () => DateTime.Now.ToString();
Expression<Func<string>> exp2 = () => { return DateTime.Now.ToString(); };
第二行不编译。
编译器以不同的方式处理这些对象。 第一个将编译为一个没有任何内容的IL方法,并返回DateTime.Now.ToString()。 编译器本身会跳过返回并将其作为
string myMethod() { return DateTime.Now.ToString(); }
第二个是基于LinqExpression对象,它以另一种方式处理它,因此这种语法会导致错误。 虽然它们第一次看起来相同,但编译器会为它们生成不同的代码。
你可以阅读为什么你会使用Expression <Func <T >>而不是Func <T>? 关于这两种结构之间的差异
Expressions<>
不能为语句生成,只能生成表达式。 在表达式周围放置大括号时,它就变成了语句/复合语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.