检查枚举是否包含多个元素而不抛出异常?

Check if enumeration contains multiple elements without throwing exception?

我想检查枚举是否包含 0、1 或 1+ 个元素。我想避免枚举整个序列的开销,因此想避免 Count().

我知道 Linq 查询 SingleOrDefault() 可用于此目的,但在 1+ 情况下会增加繁琐的异常处理。

没有 Count() 和没有异常处理的任何方法?

如果你想return第一个符合某些条件的元素,你应该使用First or FirstOrDefault, not Single

查看序列是否有多个元素的一种方法是使用 TakeCount,如下所示:

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();