Consider following linq example with blank array:
When Any() returns false as there is no number greater than zero how can All() return true conveying all numbers greater than zero ?    
var arr = new int[] { }; Console.WriteLine(arr.Any(n => n > 0)); //false  Console.WriteLine(arr.All(n => n > 0)); //true  
                Seems logical to me.
All: Are all numbers in arr greater than zero (meaning there is no number not greater than zero) => true Any: Is there any number in arr that is greater than zero => false But more important, according to Boolean Algebra:
arr.All(n => n > 0);    gives true, because it should be the logical opposite of
arr.Any(n => !(n > 0));   which gives false (actually this is what the above two points say).
The implementation of All shows very clearly why.
    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;     }   It runs a foreach over the collection. If there are no elements in the collection, it will skip the foreach and will return true.
Interestingly, the implementation on 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;     }   This cleary shows they're opposites.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With