Returns true if there are enough items in the IEnumerable
using System.Linq;
using System.Diagnostics;
namespace System.Collections.Generic
{
public static class EnumeratorExtensions
{
/// <summary>
/// Returns true if there are enough items in the IEnumerable<T>.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source">The source list of items.</param>
/// <param name="number">The number of items to check for.</param>
/// <returns>True if there are enough items, false otherwise.</returns>
public static bool AtLeast<T>(this IEnumerable<T> source, int number)
{
if (source == null)
throw new ArgumentNullException("source");
int count = 0;
using (IEnumerator<T> data = source.GetEnumerator())
while (count < number && data.MoveNext())
{
count++;
}
return count == number;
}
/// <summary>
/// Returns true if there are enough items in the IEnumerable<T> to satisfy the condition.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source">The source list of items.</param>
/// <param name="number">The number of items to check for.</param>
/// <param name="predicate">The condition to apply to the items.</param>
/// <returns>True if there are enough items, false otherwise.</returns>
public static bool AtLeast<T>(this IEnumerable<T> source, int number, Func<T, bool> condition)
{
if (source == null)
throw new ArgumentNullException("source");
if (condition == null)
throw new ArgumentNullException("condition");
int count = 0;
using (IEnumerator<T> data = source.GetEnumerator())
while (count < number && data.MoveNext())
{
if (condition(data.Current))
count++;
}
return count == number;
}
}
}
Related examples in the same category