Wenn Sie die Any()
Methode nicht umbrechen möchten, können Sie zusätzlich zu den hinzugefügten Antworten None()
Folgendes implementieren :
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;
}
Zusätzlich können Sie für die parameterlose Überladung eine ICollection<T>
Optimierung anwenden , die in der LINQ-Implementierung tatsächlich nicht vorhanden ist.
ICollection<TSource> collection = source as ICollection<TSource>;
if (collection != null) { return collection.Count == 0; }
!
?Contains
,Exists
?