C# 表达式树和委托实例的Lambda

C# 表达式树和委托实例的Lambda,c#,expression,C#,Expression,C中的lambda,只要是一个没有大括号声明主体的表达式,就可以根据推断的用法,通过表达式类型或委托实例Func、Action和friends向下编译到表达式树中 我的问题是:有没有一种方法可以欺骗语言/编译器,使来自同一lambda声明的两种表示(树和委托)都可用,而无需重复您自己 换句话说,这是否可以在不显式请求表达式树然后在其上运行.Compile的情况下完成 如果没有,是否有理由相信将编译推迟到这个运行时方法不会对.NET实现产生太大影响?在我的特定用例中,这些lambda没有捕获组,这

C中的lambda,只要是一个没有大括号声明主体的表达式,就可以根据推断的用法,通过表达式类型或委托实例Func、Action和friends向下编译到表达式树中

我的问题是:有没有一种方法可以欺骗语言/编译器,使来自同一lambda声明的两种表示(树和委托)都可用,而无需重复您自己

换句话说,这是否可以在不显式请求表达式树然后在其上运行.Compile的情况下完成


如果没有,是否有理由相信将编译推迟到这个运行时方法不会对.NET实现产生太大影响?在我的特定用例中,这些lambda没有捕获组,这意味着如果不存在编译时解决方案,我仍然可以对它们进行预热并手动缓存,但是。。。呃,这是另一种蠕虫。

我不知道有什么方法可以做到这一点,不。我只需要使用编译选项。这可以通过Roslyn扩展来实现吗?@Romoku您可以为实现这一点的语言编写一个扩展,或者使用IDE功能来处理复制,在这两种情况下,C语言本身都不支持这一点。我假设特定的方法调用obj.Methodx=>x.Id可以重写为x.Methodx=>x.Id,x=>x.Id,其中参数类型包括表达式和Func两种情况。唉,要是有办法将变量绑定到lambda文本,而不是将它们立即衰减就好了。