在使用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
,为什么?我期待对运营商的引用。
答案 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
参数。