2009-06-12 14 views
2

私が疑うように、拡張メソッドのメソッド情報を取得できません。どうしましたか?拡張メソッドのMethodInfoを取得

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

もちろん、拡張メソッド自体とはまったく関係ありません。 – Noldorin

+0

私のために働く... – LukeH

答えて

2

Works for me。メソッドのクラス、名前、および修飾子がすべて正しいことを確認してください。

いずれの状況でも動作しない理由はありません。拡張メソッドは、定義されている静的クラスに属している点で、依然として「通常の」メソッドです。それはあなたがそれらにアクセスする唯一の方法です(ただし、あなたはもちろん普通にアクセスすることもできます)。私にとって

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

私は明示的に

typeof(MyAppNamespace.Extensions).GetMethod(...) 
、それを入力する必要がので、それがEntityFrameworkの拡張クラスを使用した代わりに、私の拡張クラスの それは私だけの名前空間の衝突だった、あまりにも 私のコードで拡張メソッドを取得できませんでした

の代わりに:

typeof(Extensions).GetMethod(...)