繁体   English   中英

C#表达式语法简写

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM