.NET 4 和 .NET 4.6.2 之间的表达式主体差异
Expression Body Differences Between .NET 4 and .NET 4.6.2
我的团队正在将应用程序从目标 .NET 4.0 升级到 4.6.2。是的,派对迟到了,但迟到总比不到好。
在我们的应用程序中,有一个扩展方法 returns 来自表达式的 returned 方法的 MethodInfo。换句话说,如果我们有:
public class Foo
{
public void DoSomething() { }
}
然后有一个表情
Expression<Func<Foo, Action>> = f => f.DoSomething;
然后我们的扩展方法将 return 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 4.0:
.NET 4.6.2:
我知道 .NET 引入了执行此操作的方法;我感兴趣的是更改记录在何处,而不是解决方案(我已经有了)。
提前感谢我们的帮助!
.NET 4.5 引入了编译器使用的 MethodInfo.CreateDelegate()
方法,而不是 Delegate.CreateDelegate()
C# 表达式的记录行为
Expression<Func<Foo, Action>> e = f => f.DoSomething;
是它将创建一个表示 Func<Foo, Action>
的表达式,如果编译和调用它将采用 Foo
和 return 一个调用 [=16= 的 Action
] 在那 Foo
上。这种行为没有改变。由于记录的行为没有变化,所以很可能没有关于变化的文件。 (如果已知此类更改会导致问题,则会记录此类更改,但并非总是如此)。
我的团队正在将应用程序从目标 .NET 4.0 升级到 4.6.2。是的,派对迟到了,但迟到总比不到好。
在我们的应用程序中,有一个扩展方法 returns 来自表达式的 returned 方法的 MethodInfo。换句话说,如果我们有:
public class Foo
{
public void DoSomething() { }
}
然后有一个表情
Expression<Func<Foo, Action>> = f => f.DoSomething;
然后我们的扩展方法将 return 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 4.0:
.NET 4.6.2:
我知道 .NET 引入了执行此操作的方法;我感兴趣的是更改记录在何处,而不是解决方案(我已经有了)。
提前感谢我们的帮助!
.NET 4.5 引入了编译器使用的 MethodInfo.CreateDelegate()
方法,而不是 Delegate.CreateDelegate()
C# 表达式的记录行为
Expression<Func<Foo, Action>> e = f => f.DoSomething;
是它将创建一个表示 Func<Foo, Action>
的表达式,如果编译和调用它将采用 Foo
和 return 一个调用 [=16= 的 Action
] 在那 Foo
上。这种行为没有改变。由于记录的行为没有变化,所以很可能没有关于变化的文件。 (如果已知此类更改会导致问题,则会记录此类更改,但并非总是如此)。