将自定义DynamicObject与引用类型进行比较

时间:2012-11-17 00:47:16

标签: c# dynamic

使用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不是正确的抽象。

1 个答案:

答案 0 :(得分:0)

是的,您可以通过运营商重载。实际上,我使用这个技巧在我的DynamicLinq项目中实现动态表达式构建器。请看这里的例子:

https://github.com/davidfowl/DynamicLinq/blob/master/DynamicLINQ/DynamicExpressionBuilder.cs#L88