0

ここで見つかった MicroRuleEngine を少し調べています。

https://github.com/runxc1/MicroRuleEngine

単体テストの 1 つに、次のコードが存在します。

        [TestMethod]
    public void ChildPropertyBooleanMethods()
    {
        Order order = this.GetOrder();
        Rule rule = new Rule()
        { 
            MemberName = "Customer.FirstName",
            Operator = "EndsWith",//Regular method that exists on string.. As a note expression methods are not available
            Inputs = new List<object> { "ohn" }
        };
        MRE engine = new MRE();
        var childPropCheck = engine.CompileRule<Order>(rule);
        bool passes = childPropCheck(order);
        Assert.IsTrue(passes);

        order.Customer.FirstName = "jane";
        passes = childPropCheck(order);
        Assert.IsFalse(passes);
    }

これは、Order.FirstName が「ohn」で終わることをテストします。これはとても良いことです...しかし、文字列リテラルに対してテストする代わりに、別のオブジェクトの値に対してテストするように、MRE コードを変更するにはどうすればよいでしょうか? ? 次の行の一部:

    Rule rule = new Rule()
        { 
            MemberName = "Customer.FirstName",
            Operator = "EndsWith",//Regular method that exists on string.. As a note expression methods are not available
            Inputs = new List<object> { new MemberValue<SomeClass>(someclass, "PartOfName") }
        };

どこ:

class SomeClass {
    string PartOfName {get; set;}
}

と:

class MemberValue<T>(T instance, string memberName) {
    ...
}

私は ExpressionTrees の初心者なので、どんな助けでも大歓迎です。

4

1 に答える 1