c# - 为什么我们在 LINQ 中需要 Single()?

标签 c# .net linq extension-methods ienumerable

为什么扩展方法的主要目的是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/

相关文章:

c# - DTO 是否应该包含其他 DTO,或者这是否构成 'behaviour'?

c# - LINQ 字符串比较与 NULL 处理

c# 对 javascript 函数的多次调用不起作用

.net - LINQ to SQL for Oracle.ODP

c# - 无法转换类型为 '<>f__AnonymousType5` 6 的对象

c# - 如何在 .NET 中为我的应用程序创建配置文件

.net - .NET Framework 中的语言互操作性(基本概念)是什么?

c# - 覆盖客户端证书身份验证验证

c# - 如何从 C# 分析内存和 CPU 使用情况

c# - 取消嵌套列表迭代以提高性能