为什么扩展方法的主要目的是Single()
?
我知道如果序列中有多个元素与谓词匹配,它会抛出异常,但我仍然不明白它在哪种上下文中可能有用。
编辑:
我确实了解 Single
的作用,因此您无需在问题中解释此方法的作用。
最佳答案
它对于声明性声明很有用
I want the single element in the list and if more than one item matches then something is very wrong
很多时候,程序需要根据特定谓词将一组元素缩减为感兴趣的元素。如果有多个匹配项,则表示程序中有错误。如果没有 Single
方法,程序将需要多次遍历可能昂贵的列表的部分内容。
比较
Item i = someCollection.Single(thePredicate);
到
Contract.Requires(someCollection.Where(thePredicate).Count() == 1);
Item i = someCollection.First(thePredicate);
后者需要两个语句并迭代一个潜在昂贵的列表两次。不好。
注意:是的,First
可能 更快,因为它只需要迭代枚举直到第一个匹配的元素。其余元素无关紧要。另一方面,Single
必须考虑整个枚举。如果多个匹配项对您的程序没有影响并且表明没有编程错误,那么可以使用 First
。
关于c# - 为什么我们在 LINQ 中需要 Single()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6004730/