我为DataRow对象创建了一个通用扩展方法.该方法不需要参数.我想通过Reflection使用MethodInfo调用Generic方法.我可以为Normarl公共方法做到这一点,但不知怎的,我无法获得Generic Extension方法的引用.
我已经在SO上阅读了这个问题,但是我的问题与我的查询有关,但是没有运气.
请记住,扩展方法是编译器技巧.如果在定义扩展方法的静态类上查找静态方法,则可以很好地调用它.
现在,如果您拥有的只是一个对象并且您正在尝试查找特定的扩展方法,则可以通过在app域中搜索所有静态类来查找具有System.Runtime.CompilerServices.ExtensionAttribute
该特定方法名称和参数序列的方法,从而找到所讨论的扩展方法有问题.
如果两个扩展类定义具有相同名称和签名的扩展方法,则该方法将失败.如果程序集未在应用程序域中加载,它也将失败.
简单的方法就是这样(假设您正在寻找一种通用方法):
static class Extensions { public static T Echo(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(); } }