反射题:如何根据参数得到重载的泛型方法的MethodInfo

比如有以下定义

class Program
    {
        public static void F<T>()
        {
        }

        public static void F<T>(T a)
        {
        }

}

使用typeof(Program).GetMethod("F")会抛AmbiguousMatchException。

如何才能获取到某个方法的MethodInfo呢


哆啦的时光机
浏览 432回答 2
2回答

慕斯王

msdn:当绑定到成员的操作导致一个以上的成员匹配绑定条件时引发的异常。无法继承此类。当成员是以后期绑定的形式被调用且多个重载满足绑定条件时,或者当有多个成员与传递给仅能返回单个结果的反射方法(例如,Type..::.GetMethod 或Type..::.GetProperty)的绑定条件匹配时,引发 AmbiguousMatchException。1就是你F方法有两个重载,一个得话你那样就不会有错了。GetMethod方法不是还有很多重载啊,有一个可以指定参数类型,用哪个就没问题了。2或者使用GetMethods(“F”)

跃然一笑

我也碰到了这样的问题,如果没有出现多个方法重载的话,是直接通过方法名来获取的,但是有重载就活报你说的那种异常,我现在的方法就是避免方法重载。
打开App,查看更多内容
随时随地看视频慕课网APP