Generics 在对象上调用泛型扩展方法?

Generics 在对象上调用泛型扩展方法?,generics,reflection,c#-3.0,extension-methods,Generics,Reflection,C# 3.0,Extension Methods,我已经为DataRow对象创建了一个通用扩展方法。该方法不带参数。我想使用MethodInfo通过反射调用泛型方法。我可以为Normarl公共方法这样做,但不知何故,我无法获得泛型扩展方法的引用 我已经阅读了与我的查询相关的somehwat,但没有这样的运气。请记住,扩展方法是编译器的技巧。如果在定义了扩展方法的静态类上查找静态方法,则可以很好地调用它 现在,,如果您所拥有的只是一个对象,并且您正试图找到一个特定的扩展方法,那么您可以通过在应用程序域中搜索所有静态类,查找具有System.Run

我已经为DataRow对象创建了一个通用扩展方法。该方法不带参数。我想使用MethodInfo通过反射调用泛型方法。我可以为Normarl公共方法这样做,但不知何故,我无法获得泛型扩展方法的引用


我已经阅读了与我的查询相关的somehwat,但没有这样的运气。

请记住,扩展方法是编译器的技巧。如果在定义了扩展方法的静态类上查找静态方法,则可以很好地调用它

现在,,如果您所拥有的只是一个对象,并且您正试图找到一个特定的扩展方法,那么您可以通过在应用程序域中搜索所有静态类,查找具有
System.Runtime.CompilerServices.ExtensionAttribute
以及特定方法名称和参数序列的方法,来找到有问题的扩展方法问题

如果两个扩展类定义了一个具有相同名称和签名的扩展方法,那么这种方法将失败。如果程序集未加载到应用程序域中,它也将失败

简单的方法如下(假设您正在寻找通用方法):

静态类扩展{
公共静态T回声(此T obj){
返回obj;
}
}
班级计划{
静态void Main(字符串[]参数){
Console.WriteLine(“hello.Echo());
var mi=typeof(Extensions.GetMethod(“Echo”);
var generic=mi.MakeGenericMethod(typeof(string));
WriteLine(generic.Invoke(null,新对象[]{“hello”}));
Console.ReadKey();
}
}

据我所知,扩展方法不会是DataRow类的一部分。您可能需要查看定义了扩展方法的类&查找ExtensionMethodAttribute。它是ExtensionAttribute(而不是ExtensionMethodAttribute)。对此很抱歉。@shahkalpesh:Thnks,将尝试一下。.这是否意味着我需要从定义ExtensionMethod的类中获取MethodInfo引用,然后在运行时在承载ExtensionMethod的对象上调用它???这是一个静态方法,所以您不会在对象上调用它,对象是该方法的第一个参数。因此,这意味着,当我尝试获取引用时,它将引发异常。
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();
    }
}