Any và All là hai phương thức mở rộng LINQ dùng để kiểm tra điều kiện trên sequence.
Any(predicate)
- Trả về
truenếu ít nhất một phần tử thỏa mãn điều kiện. - Trả về
falsenếu sequence rỗng hoặc không phần tử nào thỏa mãn. - Short-circuit: dừng ngay khi tìm thấy phần tử đầu tiên thỏa mãn.
All(predicate)
- Trả về
truenếu tất cả phần tử thỏa mãn điều kiện. - Trả về
truecho sequence rỗng (vacuous truth). - Trả về
falsengay khi gặp phần tử đầu tiên không thỏa mãn (short-circuit).
Ví dụ Any
var numbers1 = new List<double> { 1.2, 1.7, 2.5, 2.4 };
bool any1 = numbers1.Any(x => x < 1); // false
var numbers2 = new List<double> { 0.8, 1.7, 2.5, 2.4 };
bool any2 = numbers2.Any(x => x < 1); // true (0.8 < 1)
Console.WriteLine(any1); // False
Console.WriteLine(any2); // True
Ví dụ All
var numbers3 = new List<double> { 0.8, 0.9, 0.6, 0.7 };
bool all1 = numbers3.All(x => x < 1); // true
var numbers4 = new List<double> { 0.8, 0.9, 1.0, 0.7 };
bool all2 = numbers4.All(x => x < 1); // false (1.0 không < 1)
Console.WriteLine(all1); // True
Console.WriteLine(all2); // False
Bảng so sánh
| Điều kiện | Any(predicate) | All(predicate) |
|---|---|---|
| Sequence rỗng | false | true |
| Có phần tử thỏa mãn | true | phụ thuộc phần tử còn lại |
| Tất cả thỏa mãn | true | true |
| Có phần tử không thỏa mãn | phụ thuộc phần tử còn lại | false |
Overload không tham số
Any(): Kiểm tra sequence có phần tử nào không (khác rỗng).All(): Không có overload không tham số.
var empty = new List<int>();
Console.WriteLine(empty.Any()); // False
Console.WriteLine(empty.All(x => x > 0)); // True (vacuous truth)
Ứng dụng thực tế
Any: Kiểm tra tồn tại (exists), validate input, kiểm tra quyền.All: Validate tất cả item thỏa mãn quy tắc (validation batch).