Oprócz dodanych odpowiedzi, jeśli nie chcesz zawijać Any()
metody, możesz zaimplementować None()
w następujący sposób:
public static bool None<TSource>(this IEnumerable<TSource> source)
{
if (source == null) { throw new ArgumentNullException(nameof(source)); }
using (IEnumerator<TSource> enumerator = source.GetEnumerator())
{
return !enumerator.MoveNext();
}
}
public static bool None<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
{
if (source == null) { throw new ArgumentNullException(nameof(source)); }
if (predicate == null) { throw new ArgumentNullException(nameof(predicate)); }
foreach (TSource item in source)
{
if (predicate(item))
{
return false;
}
}
return true;
}
Oprócz tego w przypadku przeciążenia bez parametrów można zastosować ICollection<T>
optymalizację, która w rzeczywistości nie istnieje w implementacji LINQ.
ICollection<TSource> collection = source as ICollection<TSource>;
if (collection != null) { return collection.Count == 0; }
!
?Contains
,Exists
?