0

これを使用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これは正しい抽象化ではないと思います。

4

1 に答える 1

0

はい、演算子のオーバーロードを介してできます。実際、私はこのトリックを使用して、DynamicLinq プロジェクトに動的式ビルダーを実装しています。ここで例を見てください:

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

于 2012-11-17T00:51:55.670 に答える