2009-06-12 32 views
2

我無法獲得擴展方法的方法信息,因爲我懷疑。怎麼了?獲取擴展方法的MethodInfo

_toStringMethod = typeof(ObjectExtensions).GetMethod("TryToString", 
    BindingFlags.Public | BindingFlags.Static); 
+0

是的,絕對沒有任何關係的擴展方法本身。 – Noldorin 2009-06-12 16:58:15

回答

2

適合我。只要檢查你的方法類,名稱和修飾符都是正確的。

作爲一個說明,沒有任何理由不應該在任何情況下工作。擴展方法仍然是「常規」方法,因爲它們屬於定義的靜態類。只有訪問它們的方式不同(當然,您仍然可以訪問它們)。

4

工作對我來說:

using System; 
using System.Reflection; 

public static class ObjectExtensions 
{ 
    public static string TryToString(this object x) 
    { 
     // Just guessing... 
     return x == null ? "" : x.ToString(); 
    } 
} 

class Test 
{ 
    static void Main() 
    { 
     var method = typeof(ObjectExtensions).GetMethod 
      ("TryToString", BindingFlags.Public | BindingFlags.Static); 
     // Prints System.String TryToString(System.Object) 
     Console.WriteLine(method); 
    } 
} 

你能給它失敗了類似短,但完整的例子嗎?

0

我無法得到我的代碼擴展方法太 這只是我的一個命名空間衝突,而不是我的推廣類 它使用的EntityFramework的擴展類,所以我必須明確地鍵入

typeof(MyAppNamespace.Extensions).GetMethod(...) 

代替:

typeof(Extensions).GetMethod(...)