我的团队正在将应用程序从.NET 4.0升级到4.6.2。是的,迟到了晚会,但迟到总比没有好。
在我们的应用程序中,有一个扩展方法,它从表达式返回返回方法的MethodInfo。换句话说,如果我们有:
public class Foo
{
public void DoSomething() { }
}
然后有一个表达式
Expression<Func<Foo, Action>> = f => f.DoSomething;
然后我们的扩展方法将返回方法DoSomething()
的MethodInfo代码在.NET 4.0中运行良好,但在.NET 4.6.2中不起作用。我已经改变了代码工作,但我的问题是有谁知道.NET 4.5,4.5.1,4.5.2,4.6,4.6.1和4.6.2的发行说明中的哪些内容会被记录下来?我没有任何东西多次阅读和搜索过他们。
这些是我一直在浏览的发行说明:
在调试时比较局部变量时,可以看到.NET 4.0和4.6.2之间表达式的方法体是如何不同的:
我知道.NET引入了一种方法来实现这一点;我对记录变更的位置感兴趣,而不是解决方案(我已经拥有)。
提前感谢您的帮助!
答案 0 :(得分:4)
.NET 4.5引入了编译器使用的MethodInfo.CreateDelegate()
方法而不是Delegate.CreateDelegate()
C#表达式的记录行为
Expression<Func<Foo, Action>> e = f => f.DoSomething;
是它将创建一个表示Func<Foo, Action>
的表达式,如果编译和调用将使用Foo
并返回Action
,.DoSomething()
就会Foo
}}。此行为未更改。由于记录的行为没有变化,因此很可能没有变更的文档。 (如果知道这些变化导致问题,则会记录此类变更,但并非总是如此)。