鉴于已初步化IEnumerable:
IEnumerable<T> enumerable;
Run Code Online (Sandbox Code Playgroud)
我想确定它是否有多个元素.我认为最明显的做法是:
enumerable.Count() > 1
Run Code Online (Sandbox Code Playgroud)
但是,我相信Count()列举了整个集合,这对于这个用例来说是不必要的.例如,如果集合包含大量元素或从外部源提供其数据,则在性能方面可能非常浪费.
如果不枚举超过2个元素,我怎么能这样做呢?
Cam*_*n S 50
您可以通过组合System.Linq中的扩展方法以多种方式对此进行测试...下面是两个简单的示例:
bool twoOrMore = enumerable.Skip(1).Any();
bool twoOrMoreOther = enumerable.Take(2).Count() == 2;
Run Code Online (Sandbox Code Playgroud)
我更喜欢第一个,因为一种常见的方法来检查是否Count() >= 1有Any(),因此我觉得它更具可读性.
为了它的乐趣,调用Next()两次,然后获得另一个IEnumerable.
或者,为此特定目标编写一个小包装类:EnumerablePrefetcher : IEnumerable<T>尝试在初始化时获取指定数量的项目.
它的IEnumerable<T> GetItems()方法应该以这种方式使用yield return
foreach (T item in prefetchedItems) // array of T, prefetched and decided if IEnumerable has at least n elements
{
yield return item;
}
foreach (T item in otherItems) // IEnumerable<T>
{
yield return item;
}
Run Code Online (Sandbox Code Playgroud)