我的团队正在将应用程序从目标 .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 的发行说明中的哪个位置会对此进行记录吗?我已经多次阅读和搜索它们,但一无所获。
这些是我一直在浏览的发行说明:
- https://msdn.microsoft.com/en-us/library/hh367887(v=vs.110).aspx
- https://msdn.microsoft.com/en-us/library/dn458352(v=vs.110).aspx
- https://msdn.microsoft.com/en-us/library/dn720543(v=vs.110).aspx
- https://msdn.microsoft.com/en-us/library/dn833127(v=vs.110).aspx
- https://msdn.microsoft.com/en-us/library/mt620033(v=vs.110).aspx
- https://msdn.microsoft.com/en-us/library/mt712575(v=vs.110).aspx
在调试时比较局部变量时,您可以看到表达式的方法体在 .NET 4.0 和 4.6.2 之间有何不同:
我知道 .NET 引入了执行此操作的方法;我感兴趣的是更改记录在何处,而不是解决方案(我已经有了)。
预先感谢我们的帮助!
最佳答案
MethodInfo.CreateDelegate()
编译器使用的方法而不是 Delegate.CreateDelegate()
随 .NET 4.5 引入
C# 表达式的记录行为
Expression<Func<Foo, Action>> e = f => f.DoSomething;
是它将创建一个表示 Func<Foo, Action>
的表达式如果编译和调用将采用 Foo
并返回 Action
那叫.DoSomething()
在那Foo
.这种行为没有改变。由于记录的行为没有变化,所以很可能没有关于变化的文件。 (如果已知此类更改会导致问题,则会记录此类更改,但并非总是如此)。
关于c# - .NET 4 和 .NET 4.6.2 之间的表达式主体差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42378107/