拡張メソッドはコンパイラのトリックです。拡張メソッドが定義されている静的クラスで静的メソッドを検索すると、それをうまく呼び出すことができます。
さて、あなたが持っているすべてのオブジェクトであり、あなたがSystem.Runtime.CompilerServices.ExtensionAttribute
を持っている方法のためのアプリケーションドメイン内のすべての静的クラスを検索することにより、問題の拡張メソッドを見つけることができる特定拡張メソッドを見つけようとしている場合と、問題の特定のメソッド名とパラメータシーケンス。
2つの拡張クラスが同じ名前と署名を持つ拡張メソッドを定義すると、その方法は失敗します。アセンブリがアプリケーションドメインにロードされていない場合も失敗します。
単純なアプローチは、(あなたが一般的な方法を探していると仮定した場合)これです:
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
ExtensionAttribute(ExtensionMethodAttributeではなく)です。申し訳ありません。 – shahkalpesh
@shahkalpesh:Thnks、それを試してみましょう.. –