操作符 |
如果源序列是空的 |
源序列只包含一個元素 |
源序列包含多個元素 |
First |
拋異常 |
返回該元素 |
返回第一個元素 |
FirstOrDefault |
返回default(TSource) |
返回該元素 |
返回第一個元素 |
Last |
拋異常 |
返回該元素 |
返回最后一個元素 |
LastOrDefault |
返回default(TSource) |
返回該元素 |
返回最后一個元素 |
Single |
拋異常 |
返回該元素 |
拋異常 |
SingleOrDefault |
返回default(TSource) |
返回該元素 |
拋異常 |
很明顯,如果輸入序列只有一個元素的話,這幾個操作符的執行結果是非常一致的:) 類似的,如果輸入的序列是空的的話,那么沒有“OrDefault”的操作符會拋異常(InvalidOperationException),而帶有“OrDefault”的操作符則會返回元素類型的默認值(引用類型的默認值為null,int的默認值為0,等等)。
如果(可能是被過濾過的)輸入序列含有多個元素的話,那這些操作符的執行結果的差異是很大的,First和Last的結果是顧名思義的,而Single拋出異常。值得注意的是,SingleOrDefault也會拋出異常,因為它要做的事又不是像這樣:如果輸入序列只有一個元素的話,返回該元素,否則的話返回默認值。如果你需要能夠處理多元素序列的操作符的話,用First或Last。如果你需要處理可能為空的序列的話,使用FirstOrDefault或LastOrDefault。請注意,如果使用帶有“OrDefault”的操作符的話,那么一個空的序列和一個僅包含默認值的序列的執行結果會是完全一樣的。