Ngôn ngữ LINQ - Toán tử FirstOrDefault

Phương thức FirstOrDefault trong LINQ

Tương tự như phương thức First, phương thức FirstOrDefault cũng trả về phần tử đầu tiên của danh sách hoặc phần tử đầu tiên thỏa mãn điều kiện. Trả về giá trị mặc định nếu không có phần tử như vậy.

Phương thức FirstOrDefault cũng có hai phương thức quá tải. Phương thức quá tải đầu tiên không lấy bất kỳ tham số đầu vào nào và trả về phần tử đầu tiên trong danh sách.

Phương thức quá tải thứ hai lấy biểu thức lambda làm predicate delegate để chỉ định một điều kiện và trả về phần tử đầu tiên thỏa mãn điều kiện đã chỉ định.

public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source);

public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source,
    Func<TSource, bool> predicate);
    

Phương thức FirstOrDefault thực hiện tương tự như phương thức First. Sự khác biệt duy nhất là nó trả về giá trị mặc định của kiểu dữ liệu của danh sách nếu danh sách trống hoặc không tìm thấy bất kỳ phần tử nào thỏa mãn điều kiện.

Ví dụ sau đây minh họa phương thức FirstOrDefault:

IList<int> intList = new List<int>() { 7, 10, 21, 30, 45, 50, 87 };
IList<string> strList = new List<string>() { "One", "Two", "Three", "Four", "Five" };
IList<string> emptyList = new List<string>();
		
Console.WriteLine("1st Element in intList: {0}", intList.FirstOrDefault());
Console.WriteLine("1st Even Element in intList: {0}", intList.FirstOrDefault(i => i % 2 == 0));

Console.WriteLine("1st Element in strList: {0}", strList.FirstOrDefault());

Console.WriteLine("1st Element in emptyList: {0}", emptyList.FirstOrDefault());

Đây là kết quả khi biên dịch và thực thi chương trình:

1st Element in intList: 7
1st Even Element in intList: 10
1st Element in strList: One
1st Element in emptyList:

Xem ví dụ

Lưu ý: nên sử dụng phương thức mở rộng FirstOrDefault thay thế cho phương thức First để loại trừ khả năng xảy ra ngoại lệ thời gian chạy.