使用DynamicObject
它可以创建自定义类并在将实例与其他对象进行比较时定义其行为。它是通过覆盖来完成的TryBinaryOperation
。
但是,当我尝试将它与null
任何参考值进行比较时,永远不会调用被覆盖的方法。
public class Foo : DynamicObject
{
public override bool TryBinaryOperation(BinaryOperationBinder binder, object arg, out object result)
{
if (binder.Operation == ExpressionType.Equal)
{
result = true;
return true;
}
return base.TryBinaryOperation(binder, arg, out result);
}
}
static void Main(string[] args)
{
dynamic foo = new Foo();
Console.WriteLine(foo == 1); // True
Console.WriteLine(foo == new object()); // False
Console.WriteLine(foo == null); // False
}
有没有办法拦截这个电话?我认为DynamicObject
这不是正确的抽象。