0

一直在看一下这里找到的 MicroRuleEngine:

https://github.com/runxc1/MicroRuleEngine

在其中一个单元测试中,存在以下代码:

        [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

0

如果要在将名称作为字符串时获取属性的值,请使用反射:

object GetPropertyValue(object target, string propertyName)
{
    return target.GetType().GetProperty(propertyName).GetValue(target);
}
于 2013-08-14T10:30:18.887 回答