这可能不是正确的方法,但是这里......
我有一个'规则列表'我在XML中定义了......
Rule found = rules.Find(x => (x.key1 == "2") && (x.key2 == "John"));
我试图想出一种新的规则'可以在重新编译和测试程序之外定义和使用。
因此程序将XML反序列化为自定义对象列表(List)。到目前为止没问题。
现在,我想使用Find来做类似......(C#)
的事情{{1}}
...从上面返回第二条规则,因此我正在寻找" Blue"。
这甚至可能还是我离开基地了?
答案 0 :(得分:2)
您应该使用SingleOrDefault:
Rule found = rules.SingleOrDefault(r => r.key1 == "2" && r.key2 == "John");
引用MSDN:
返回序列的唯一元素,如果序列为空,则返回默认值;如果序列中有多个元素,则此方法抛出异常。
请注意,如果找不到满足给定表达式的元素,found
将为null
。
此外,如果列表中的多个元素满足条件,它将抛出InvalidOperationException。
我认为这是预期的,因为您正在基于每个规则的唯一键进行搜索。如果有两个具有相同键的规则,则应引发异常。
如果您期望正好一个元素(并且如果找到更多或没有,则抛出异常),您应该使用Single:
Rule found = rules.Single(r => r.key1 == "2" && r.key2 == "John");
返回序列的唯一元素,如果序列中没有一个元素,则抛出异常。