如何将Expression>类型用作字典中的键?
我刚开始使用Expression实例,不确定我想做的是否可行。
似乎两个相同的表达式不相等,因为当我尝试使用表达式作为键来向字典中添加条目时,它返回false,除非我使用完全相同的表达式实例。
TypeToTest test = new TypeToTest();
Expression<Func<object>> expression = ()=>test.PropertyA;
IDictionary<Expression<Func<object>>,bool> dictionary = new Dictionary<Expression<Func<object>>, bool> ();
dictionary[expression] = true;
Assert.That (dictionary.ContainsKey(expression), Is.True);
Assert.That (dictionary.ContainsKey(()=>test.PropertyA), Is.True);
上面的最后一行失败了,而我希望它成功。
意图是能够定义适用于对象属性或方法的一组规则,以便我可以确定例如属性是否可编辑,或字典中具有特定键的值是否可以被删除。我不想在对象上设置一个标志来确定它是否可编辑(因为可编辑性可能对不同的属性有所不同),也不想设置另一个标志来确定它是否可删除,而是由另一个类负责维护与对象相关联的规则,以便随着对象在未来的扩展,可以添加更多规则来描述对象的组成部分的可编辑性/可访问性/可删除性等。如果这样说有意义的话。
这里有一个类似的帖子(链接),但这似乎是基于属性名进行键控,而我希望也可以基于方法和参数进行键控,以便我可以支持根据键确定字典中保存的对象的可编辑性。
像这样的东西是否可能存在,还是只是空想?
x => x.A
这个表达式和y => y.A
相同吗?如果这个表达式捕获了一个被捕获变量包装器的对象实例,会怎么样? - Marc Gravell