2011-07-24 3 views
2
私はその署名があることをIsExtensionMethodというメソッドを書きたい

1つのメソッドを決定する方法 "Typeの拡張メソッドかどうか"

public bool IsExtensionMethod(object anObject, string method) 
{ 
    // if method was an extension for anObject return true else false 
} 

私はそれをどのように行うことができますか?

私は、次のコードを試みたが、いくつかのケースでは、戻り値が正しくないです。

public bool IsExtensionMethod(object anObject, string method) 
{ 
    return anObject.GetType().GetMethods().Where(item => item.Name == method).Count() == 0; 
} 
+0

可能重複(http://stackoverflow.com/questions/721800/using-reflection-to-check-if-a- method-is-extension-method) –

答えて

2

それはそれらをコンパイルするとき、コンパイラは、拡張メソッドにCompilerServices.ExtensionAttribute属性を追加します。この属性を探します。 【方法は、「拡張メソッド」であるかどうかを確認するためにリフレクションを使用して]の

http://www.hanselman.com/blog/HowDoExtensionMethodsWorkAndWhyWasANewCLRNotRequired.aspx

+0

あなたは正しいです。しかし、私は前述の方法をしたい。ロードされたすべてのアセンブリのメソッドを検索することです。簡単な方法ですか? –

+0

@Saeed Afshari、はい、コンパイラと同じように、拡張メソッドを検索する必要があります。これが頻繁に行う必要がある場合は、検索を実行して結果をキャッシュすることができます。コンパイル後のプロセスとしてやって、 'mylibrary.dll.extensions.xml'やそれに相当するもののようなdllファイルを作成することもできます。 –

関連する問題