自定义类的Type.GetMethod()返回NULL

时间:2015-04-18 12:16:57

标签: c# reflection

在使用MyClass时指定比较类型时遇到== operator Type.GetMethod()方法参考时遇到问题,这是我的代码:

public class MyClass
{
    public object Value { get; set; }

    public MyClass(object inVal = null)
    {
        Value = inVal;
    }

    public static bool operator ==(MyClass a, string b)
    {
        // If one is null, but not both, return false.
        if (((object)a == null) || ((object)b == null)) return false;

        // Return true if the fields match:
        return Convert.ToString(a.Value) == b;
    }

    public static bool operator !=(MyClass a, string b)
    {
        return !(a == b);
    }

    public static bool operator ==(MyClass a, bool b)
    {
        // If one is null, but not both, return false.
        if ((object)a == null) return false;

        // Return true if the fields match:
        return Convert.ToBoolean(a.Value) == b;
    }

    public static bool operator !=(MyClass a, bool b)
    {
        return !(a == b);
    }
}

致电

var methodInfo = typeof(MyClass).GetMethod("op_Equality", new Type[]  {  typeof(bool)  } )

var methodInfo = typeof(MyClass).GetMethod("op_Equality", new Type[]  {  typeof(string)  } )

,返回NULL,为什么?我期待对运营商的引用。

2 个答案:

答案 0 :(得分:2)

等式/不等式运算符适用于两种类型,
(在你的情况下是类类型和bool / string类型), 你还需要传递类类型(按照正确的顺序)

Type t1 = typeof(MyClass);
var methodInfo1 = t1.GetMethod("op_Equality", 
                  new Type[]  { t1, typeof(bool)  } );
var methodInfo2 = t1.GetMethod("op_Equality", 
                  new Type[]  { t1, typeof(string)  } );

答案 1 :(得分:1)

普通方法需要查找公共实例方法。由于你的是静态方法,你应该使用GetType的重载,你可以传递BindingFlags Static参数。