我正在開發一個程式,該程式在運行時根據一組輸入計算運算式,然后遠程執行這些運算式。這需要動態創建呼叫不同輔助函式的運算式。
對于靜態輔助函式,可以通過使用以下方法獲取 MethodInfo 實體來保證編譯時安全:
var myMethodInfo = ((Func<int, int>) Helpers.MyStaticHelper.DoSomethingUseful).Method
使用它,如果Helpers.MyStaticHelper.DoSomethingUseful要更改它的名稱或簽名,這將導致編譯時錯誤。但是,它似乎只適用于靜態方法。對非靜態使用類似的方法給出了 CS0120 An object reference is required for the nonstatic field, method, or property 'Helpers.MyDynamicHelper.DoSomethingElse(int, int)'。
使用以下方法可以解決此問題:
var myMethodInfo = typeof(Helpers.MyDynamicHelper).GetMethod("DoSomethingElse")
但是,如果DoSomethingElse被更改,這會冒運行時例外的風險。我知道沒有實體就不可能呼叫該方法,但是這些實體是收集和快取先決條件資料所必需的,因此在執行運算式之前創建的任何實體都是不正確的。
是否可以為沒有實體的方法獲得編譯時安全的 MethodInfo?
uj5u.com熱心網友回復:
您可以使用它nameof來確保方法名稱是準確的:
var myMethodInfo = typeof(Helpers.MyDynamicHelper)
.GetMethod(nameof(Helpers.MyDynamicHelper.DoSomethingElse));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/510661.html
標籤:C#林克反射linq 表达式
