众所周知,我可以将普通的 lambda 表达式转换为Expression<T>
:
Func<int> foo1 = () => 0; // delegate compiles fine
Expression<Func<int>> foo2 = () => 0; // expression compiles fine
我怎样才能用 async lambda 做同样的事情?我尝试过以下类比:
Func<Task<int>> bar1 = async () => 0; // also compiles (async lambda example)
Expression<Func<Task<int>>> bar2 = async () => 0; // CS1989: Async lambda expressions cannot be converted to expression trees
有什么可能的解决方法吗?
仅当代码可以用表达式树表示时,C# 才能将 lambda 表达式转换为表达式树,如果您注意到,在表达式中没有等效的“async”关键字System.Linq.Expressions https://msdn.microsoft.com/en-us/library/system.linq.expressions(v=vs.110).aspx
因此,不仅是异步,而且 C# 中提供的表达式中没有等效表达式的任何内容,C# 都无法将其转换为表达式树。
其他例子是
- lock
- unsafe
- using
- yield
- await
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)