当前位置:  开发笔记 > 小程序 > 正文

在对象上调用通用扩展方法?

如何解决《在对象上调用通用扩展方法?》经验,为你挑选了1个好方法。

我为DataRow对象创建了一个通用扩展方法.该方法不需要参数.我想通过Reflection使用MethodInfo调用Generic方法.我可以为Normarl公共方法做到这一点,但不知怎的,我无法获得Generic Extension方法的引用.

我已经在SO上阅读了这个问题,但是我的问题与我的查询有关,但是没有运气.



1> Sam Saffron..:

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

现在,如果您拥有的只是一个对象并且您正在尝试查找特定的扩展方法,则可以通过在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();
    }
}

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有