Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Khác biệt giữa All và Any trong LINQ C#

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ề true nếu ít nhất một phần tử thỏa mãn điều kiện.
  • Trả về false nế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ề true nếu tất cả phần tử thỏa mãn điều kiện.
  • Trả về true cho sequence rỗng (vacuous truth).
  • Trả về false ngay 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ệnAny(predicate)All(predicate)
Sequence rỗngfalsetrue
Có phần tử thỏa mãntruephụ thuộc phần tử còn lại
Tất cả thỏa mãntruetrue
Có phần tử không thỏa mãnphụ thuộc phần tử còn lạifalse

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).