Ngôn ngữ LINQ - Toán tử LastOrDefault
Phương thức LastOrDefault trong LINQ
Tương tự như phương thức Last, phương thức LastOrDefault cũng trả về phần tử cuối cùng của danh sách hoặc phần tử cuối cùng 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 LastOrDefault 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ử cuối cùng 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ử cuối cùng thỏa mãn điều kiện đã chỉ định.
public static TSource LastOrDefault<TSource>(this IEnumerable<TSource> source);
public static TSource LastOrDefault<TSource>(this IEnumerable<TSource> source,
Func<TSource, bool> predicate);
Phương thức LastOrDefault thực hiện tương tự như phương thức Last. 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 LastOrDefault:
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("Last Element in intList: {0}", intList.LastOrDefault());
Console.WriteLine("Last Even Element in intList: {0}", intList.LastOrDefault(i => i % 2 == 0));
Console.WriteLine("Last Element in strList: {0}", strList.LastOrDefault());
Console.WriteLine("Last Element in emptyList: {0}", emptyList.LastOrDefault());
Đây là kết quả khi biên dịch và thực thi chương trình:
Last Element in intList: 87
Last Even Element in intList: 50
Last Element in strList: Five
Last Element in emptyList:
Tip: nên sử dụng phương thức mở rộng LastOrDefault thay thế cho phương thức Last để loại trừ khả năng xảy ra ngoại lệ thời gian chạy.