c#表达式语法速记
本文关键字:语法 表达式 | 更新日期: 2023-09-27 18:04:57
根据我的理解,我可以这样使用:
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_
不能为语句生成Expressions<>
s,只能为表达式生成。当你给表达式加上大括号时,它就变成了一个语句/复合语句。