使用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
不是正确的抽象。
答案 0 :(得分:0)
是的,您可以通过运营商重载。实际上,我使用这个技巧在我的DynamicLinq项目中实现动态表达式构建器。请看这里的例子:
https://github.com/davidfowl/DynamicLinq/blob/master/DynamicLINQ/DynamicExpressionBuilder.cs#L88