我的團隊正在將從.NET 4.0定位到4.6.2的應用程序升級。是的,晚會晚了,但比從未晚。.NET 4和.NET 4.6.2之間的表達體差異
在我們的應用程序中,有一個擴展方法從表達式返回返回方法的MethodInfo。換句話說,如果我們有:
public class Foo
{
public void DoSomething() { }
}
,然後有一個表達
Expression<Func<Foo, Action>> = f => f.DoSomething;
那麼我們的擴展方法將返回方法的MethodInfo的DoSomething的()
中的代碼工作很大.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引入了這樣的方法;我對變更記錄的位置感興趣,而不是解決方案(我已經擁有)。
在此先感謝您的幫助!
是的,因爲在你的例子中你正在使用一個委託,並改變了如何訪問它們的api。這裏有一個關於我最喜歡的地方的問題,但我正在用手機。但你可以將它改爲'Expression> x = f => f.DoSomething();並以這種方式訪問MethodInfo(這應該是更好的) –
pinkfloydx33
這裏的答案之一應該有所幫助,儘管你應該嘗試這樣做一個'Expression>''而不是'Expression >'http://stackoverflow.com/a/26976055/491907您正在嘗試使用一個基本上是委託的方法組,並且您必須執行一些額外的「解包「以獲得方法 –
pinkfloydx33
也爲了具體回答你關於文檔的問題,這個變化在4.5版本中出現了,但我懷疑這被明確記錄爲它對系統的濫用。如果有任何事情你會發現它與'Delegate's或者'MethodInfo.CreateDelegate'有關,它就是它被改爲使用 – pinkfloydx33