3 回答

TA贡献1854条经验 获得超8个赞
SingleOrDefault
FirstOrDefault

TA贡献1864条经验 获得超6个赞
SingleOrDefault
返回类型的默认值(例如,int的默认值为0) FirstOrDefault
返回类型的默认值。
SingleOrDefault
返回记录 FirstOrDefault
返回记录
SingleOrDefault
抛出异常 FirstOrDefault
返回第一条记录
SingleOrDefault
.
FirstOrDefault

TA贡献1880条经验 获得超4个赞
语义差异 性能差异
语义差异:
FirstOrDefault
返回第一项的潜在多个(或默认情况下,不存在)。 SingleOrDefault
假设存在单个项并返回它(如果不存在则默认)。多项违反合同,引发异常。
性能差异
FirstOrDefault
通常情况下,它的迭代速度更快,直到找到元素为止,并且只有在找不到元素时才需要迭代整个可枚举的元素。在许多情况下,很有可能找到一个项目。 SingleOrDefault
需要检查是否只有一个元素,因此始终迭代整个枚举。准确地说,它迭代直到找到第二个元素并抛出一个异常。但在大多数情况下,没有第二个因素。
结语
使用 FirstOrDefault
如果你不在乎有多少物品 或当您无法负担检查唯一性时(例如,在一个非常大的集合中)。当您检查将项添加到集合时的唯一性时,在搜索这些项时再次检查可能太昂贵了。 使用 SingleOrDefault
如果您不需要太在意性能,并且希望确保单个项目的假设对读者来说是明确的,并在运行时进行检查。
First
/ FirstOrDefault
Single
/ SingleOrDefault
- 3 回答
- 0 关注
- 898 浏览
添加回答
举报