Ответ 1
В случае большой коллекции test
(когда Count()
стоит дорого) вы можете попробовать типичный трюк:
if (test.Skip(1).Any())
В общем случае test.Count() > x
можно переписать в
if (test.Skip(x).Any())
Изменить: вы можете скрыть такие трюки в методе, скажем EnsureCount
:
public static partial class EnumerableExtensions {
public static IEnumerable<T> EnsureCount<T>(this IEnumerable<T> source, int count) {
if (null == source)
throw new ArgumentNullException("source");
if (count <= 0)
foreach (var item in source)
yield return item;
else {
List<T> buffer = new List<T>(count);
foreach (var item in source) {
if (buffer == null)
yield return item;
else {
buffer.Add(item);
if (buffer.Count >= count) {
foreach (var x in buffer)
yield return x;
buffer = null;
}
}
}
}
}
}
и поэтому ваш код будет
var test = Test()
.Where(o => o > 2 && o < 6)
.EnsureCount(2); // <- Count() > 1, so at least 2 items
foreach (var t in test)
Console.WriteLine(t);