2009-06-26 21 views
4

我已經爲DataRow對象創建了一個通用擴展方法。該方法沒有參數。我想通過使用MethodInfo的反射來調用泛型方法。我可以爲Normarl公共方法做到這一點,但不知何故,我無法獲得泛型擴展方法的參考。在對象上調用泛型擴展方法?

我讀過this question關於這個somehwat與我的查詢有關,但沒有這樣的運氣。

+0

據我瞭解,擴展方法將不是DataRow類的一部分。您可能需要查看您已定義擴展方法的類並查找ExtensionMethodAttribute。 – shahkalpesh 2009-06-26 06:20:08

+0

它是ExtensionAttribute(而不是ExtensionMethodAttribute)。對於那個很抱歉。 – shahkalpesh 2009-06-26 06:23:12

回答

11

請記住,擴展方法是編譯器技巧。如果你在定義了擴展方法的靜態類上查找靜態方法,你可以很好地調用它。現在

,如果你已經是一個對象,你正在努力尋找一個特定擴展方法,你可以通過搜索找到了在應用程序域中的所有靜態類是有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(); 
    } 
}