Имейте в виду, что методы расширения - это трюки компилятора. Если вы посмотрите статический метод в статическом классе, где определен метод расширения, вы можете вызвать его просто отлично.
Теперь, если все у вас есть объект, и вы пытаетесь найти конкретный метод расширения вы могли бы найти метод расширения в вопросе путем поиска всех ваши статических классов в области приложений для методов, которые имеют 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();
}
}
Насколько я понимаю, метод расширения не будет частью класса DataRow. Возможно, вам придется посмотреть на класс, в котором вы определили метод расширения, и найдите ExtensionMethodAttribute. – shahkalpesh
Это ExtensionAttribute (а не ExtensionMethodAttribute). Извини за это. – shahkalpesh
@shahkalpesh: Thnks, попробует .. –