4
我已經爲DataRow對象創建了一個通用擴展方法。該方法沒有參數。我想通過使用MethodInfo的反射來調用泛型方法。我可以爲Normarl公共方法做到這一點,但不知何故,我無法獲得泛型擴展方法的參考。在對象上調用泛型擴展方法?
我讀過this question關於這個somehwat與我的查詢有關,但沒有這樣的運氣。
我已經爲DataRow對象創建了一個通用擴展方法。該方法沒有參數。我想通過使用MethodInfo的反射來調用泛型方法。我可以爲Normarl公共方法做到這一點,但不知何故,我無法獲得泛型擴展方法的參考。在對象上調用泛型擴展方法?
我讀過this question關於這個somehwat與我的查詢有關,但沒有這樣的運氣。
請記住,擴展方法是編譯器技巧。如果你在定義了擴展方法的靜態類上查找靜態方法,你可以很好地調用它。現在
,如果你已經是一個對象,你正在努力尋找一個特定擴展方法,你可以通過搜索找到了在應用程序域中的所有靜態類是有System.Runtime.CompilerServices.ExtensionAttribute
方法有問題的擴展方法和問題中的特定方法名稱和參數序列。
如果兩個擴展類定義了一個具有相同名稱和簽名的擴展方法,則該方法將失敗。如果程序集未加載到應用程序域中,它也會失敗。
簡單的方法是這樣的(假設你正在尋找一個泛型方法):
static class Extensions {
public static T Echo<T>(this T obj) {
return obj;
}
}
class Program {
static void Main(string[] args) {
Console.WriteLine("hello".Echo());
var mi = typeof(Extensions).GetMethod("Echo");
var generic = mi.MakeGenericMethod(typeof(string));
Console.WriteLine(generic.Invoke(null, new object[] { "hello" }));
Console.ReadKey();
}
}
據我瞭解,擴展方法將不是DataRow類的一部分。您可能需要查看您已定義擴展方法的類並查找ExtensionMethodAttribute。 – shahkalpesh 2009-06-26 06:20:08
它是ExtensionAttribute(而不是ExtensionMethodAttribute)。對於那個很抱歉。 – shahkalpesh 2009-06-26 06:23:12