First,FirstOrDefault,Single,SingleOrDefault的区别

简介: 操作符 如果源序列是空的 源序列只包含一个元素 源序列包含多个元素 First 抛异常 返回该元素 返回第一个元素 FirstOrDefault ...

 

操作符

如果源序列是空的

源序列只包含一个元素

源序列包含多个元素

First

抛异常

返回该元素

返回第一个元素

FirstOrDefault

返回default(TSource)

返回该元素

返回第一个元素

Last

抛异常

返回该元素

返回最后一个元素

LastOrDefault

返回default(TSource)

返回该元素

返回最后一个元素

Single

抛异常

返回该元素

抛异常

SingleOrDefault

返回default(TSource)

返回该元素

抛异常

 

很明显,如果输入序列只有一个元素的话,这几个操作符的执行结果是非常一致的:) 类似的,如果输入的序列是空的的话,那么没有“OrDefault”的操作符会抛异常(InvalidOperationException),而带有“OrDefault”的操作符则会返回元素类型的默认值(引用类型的默认值为nullint的默认值为0,等等)。

如果(可能是被过滤过的)输入序列含有多个元素的话,那这些操作符的执行结果的差异是很大的,First和Last的结果是顾名思义的,而Single抛出异常。值得注意的是,SingleOrDefault也会抛出异常,因为它要做的事又不是像这样:如果输入序列只有一个元素的话,返回该元素,否则的话返回默认值。如果你需要能够处理多元素序列的操作符的话,用FirstLast。如果你需要处理可能为空的序列的话,使用FirstOrDefaultLastOrDefault。请注意,如果使用带有“OrDefault”的操作符的话,那么一个空的序列和一个仅包含默认值的序列的执行结果会是完全一样的。

学习交流群:364976091
相关文章
|
2月前
ts中interface和type的区别
ts中interface和type的区别
103 21
|
4月前
|
JavaScript
Component name “header“ should always be multi-word
Component name “header“ should always be multi-word
|
6月前
|
JavaScript
TS中 type和interface的区别
TS中 type和interface的区别
589 0
|
6月前
|
JavaScript 前端开发 索引
TS - interface和type的区别
TS - interface和type的区别
84 0
913 error Component name “home“ should always be multi-word vuemulti-word-component-names
913 error Component name “home“ should always be multi-word vuemulti-word-component-names
102 0
|
数据库
Field ‘id‘ doesn‘t have a default value
Field ‘id‘ doesn‘t have a default value
166 0
|
搜索推荐 索引
Term Suggester 中 suggest_mode 的三种模式missing、popular、always 的区别
Term Suggester 中 suggest_mode 的三种模式missing、popular、always 的区别
error: R_LARCH_SOP_PUSH_PCREL against `x264_log_default‘:PLT shouldn‘t be with r_addend.
error: R_LARCH_SOP_PUSH_PCREL against `x264_log_default‘:PLT shouldn‘t be with r_addend.
203 0
|
JavaScript 前端开发 开发者
Component name “xxx“ should always be multi-word
Component name “xxx“ should always be multi-word
Component name “xxx“ should always be multi-word
|
Java 数据库连接 mybatis
A query was run and no Result Maps were found for the Mapped Statement
A query was run and no Result Maps were found for the Mapped Statement
220 0