獲取調用MethodInfo最安全的方法我目前正在研究一個擴展方法,以促進問題的標題建議。從行動<T>的實例
我當然可以。對該類型使用GetMetohd(「Invoke」)方法調用並使用它, 但是有些東西告訴我這不是最「安全」的方式。 類別和類型可能會發生變化,包括BCL中的類型和類型。
所以我想出了下面的LINQ語句,它工作得很好:
public static class ActionExtensions
{
public static MethodInfo GetInvoke<T>(this Action<T> obj)
{
var actionType = obj.GetType();
var tType= typeof(T);
return (
from methodInfo
in actionType.GetMethods()
let par = methodInfo.GetParameters()
where par.Length == 1 && par[0].ParameterType == tType
select methodInfo
).FirstOrDefault();
}
}
的事情是,即使這種感覺有點玄乎,從一次開始的行動可以改變並且包含這樣的一種方法性狀......即使我添加「HasGenericParameters」約束,也沒有安全保證。
你有關於一種方式來獲得相關的準確的MethodInfo實例的任何想法
"Action<T>.Invoke()"
'Action'有一個.Method屬性,它已經返回MethodInfo對於委託後面的確切方法。 –
尋找如何使用反射發射調用委託(我假設你想這樣)每個人似乎都依賴'GetMethod(「Invoke」)'。 .NET開發人員無法做任何事情來破壞所有這些代碼。我認爲依靠這一點是安全的。 – usr
輝煌!謝謝! @RexM –