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