[英]how to get method through reflection of extension overloaded generic method?
public static M MustNotEqual<M, T, R>(this IMustPassRule<M, T, R> mpr, R value)
{
return mpr.MustPassRule(new NotEqualRule<R>(value));
}
public static M MustNotEqual<M, T, R>(this IMustPassRule<M, T, R> mpr, R value, IEqualityComparer<R> comparer)
{
return mpr.MustPassRule(new NotEqualRule<R>(value, comparer));
}
例如如何通過反射優先法?
如果參數不是通用類型,則可以使用this overload of GetMethod
並傳遞類型數組以匹配參數類型。在這種情況下,我可以使用linq來實現:
yourType.GetMethods(BindingFlags.Static | BindingFlags.Public)
.FirstOrDefault(m => m.Name == "MustNotEqual" &&
m.GetParameters().Length == 2);
當然,您可以改進它以匹配參數類型,這只是一個示例。要了解為什么不使用GetMethod
,可以看一下這個問題 。
尋找適用於類的擴展方法非常棘手。 當您調用擴展方法時,編譯器將查看作用域中所有具有類型為ExtensionAttribute的方法的類型。 該擴展名由編譯器在編譯擴展方法時自動添加。
嘗試在運行時解析它們很困難,因為在執行代碼時並沒有定義范圍內的名稱空間的概念-您所擁有的只是您的類,並且不一定與擴展方法相關。 如果要在特定的類中搜索擴展方法,那很容易,您只需將GetMethod
與相應的BindingFlags
一起使用,並檢查Extension
屬性(如果想真正實現)。 但是,如果不是這種情況,那么您將需要枚舉當前加載的所有程序集,以搜索具有靜態方法且具有與參數條件匹配的Extension
屬性的公共類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.