La mise en œuvre de All
montre très clairement pourquoi.
public static bool All<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) {
if (source == null) throw Error.ArgumentNull("source");
if (predicate == null) throw Error.ArgumentNull("predicate");
foreach (TSource element in source) {
if (!predicate(element)) return false;
}
return true;
}
Il fonctionne à foreach
sur la collection. S'il n'y a pas d'éléments dans la collection, les foreach
seront ignorés et retourneront vrais.
Fait intéressant, la mise en œuvre sur Any
public static bool Any<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) {
if (source == null) throw Error.ArgumentNull("source");
if (predicate == null) throw Error.ArgumentNull("predicate");
foreach (TSource element in source) {
if (predicate(element)) return true;
}
return false;
}
Cela montre clairement qu'ils sont opposés.