检查枚举是否包含多个元素而不抛出异常?
Check if enumeration contains multiple elements without throwing exception?
我想检查枚举是否包含 0、1 或 1+ 个元素。我想避免枚举整个序列的开销,因此想避免 Count()
.
我知道 Linq 查询 SingleOrDefault()
可用于此目的,但在 1+ 情况下会增加繁琐的异常处理。
没有 Count()
和没有异常处理的任何方法?
如果你想return第一个符合某些条件的元素,你应该使用First or FirstOrDefault, not Single
查看序列是否有多个元素的一种方法是使用 Take
和 Count
,如下所示:
if (mySequence.Take(2).Count() == 2) {
... // Sequence has at least two elements
}
Take(2)
将计数限制为最多两个,因此使用 Count()
不像 mySequence.Count() > 1
.
那样昂贵
如果需要抓取第一个元素,将Take
的结果存储在列表中,避免再次迭代序列。
.ElementatOrdefault(1) != null
您可以使用 skip 和 any。
list.Skip(n).Any();
我想检查枚举是否包含 0、1 或 1+ 个元素。我想避免枚举整个序列的开销,因此想避免 Count()
.
我知道 Linq 查询 SingleOrDefault()
可用于此目的,但在 1+ 情况下会增加繁琐的异常处理。
没有 Count()
和没有异常处理的任何方法?
如果你想return第一个符合某些条件的元素,你应该使用First or FirstOrDefault, not Single
查看序列是否有多个元素的一种方法是使用 Take
和 Count
,如下所示:
if (mySequence.Take(2).Count() == 2) {
... // Sequence has at least two elements
}
Take(2)
将计数限制为最多两个,因此使用 Count()
不像 mySequence.Count() > 1
.
如果需要抓取第一个元素,将Take
的结果存储在列表中,避免再次迭代序列。
.ElementatOrdefault(1) != null
您可以使用 skip 和 any。
list.Skip(n).Any();