ทั้ง Last() และ LastOrDefault() จะดึงค่าที่เกิดขึ้นครั้งสุดท้าย แต่ความแตกต่างที่สำคัญระหว่าง Last() และ LastOrDefault() คือ Last() จะส่งข้อยกเว้นหากไม่มีข้อมูลผลลัพธ์สำหรับเกณฑ์ที่ให้มา ในขณะที่ LastOrDefault() จะคืนค่าเริ่มต้น (null) หากไม่มีข้อมูลผลลัพธ์
ใช้ Last() เมื่อเรารู้ว่าลำดับจะมีองค์ประกอบอย่างน้อยหนึ่งรายการ ใช้ LastOrDefault() เมื่อเราไม่แน่ใจเกี่ยวกับข้อมูล
ตัวอย่าง
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; namespace ConsoleApp { public class Student { public int Id { get; set; } public string Name { get; set; } } class Program { static void Main() { var studentsList = new List<Student> { new Student { Id = 1, Name = "John" }, new Student { Id = 2, Name = "Jack" }, new Student { Id = 1, Name = "Jill" } }; var lastOrDefaultStudent = studentsList.LastOrDefault(student => student.Id == 1); var lastStudent = studentsList.Last(student => student.Id == 1); Console.WriteLine($"LastOrDefault: {lastOrDefaultStudent.Id} {lastOrDefaultStudent.Name}"); Console.WriteLine($"Last: {lastStudent.Id} {lastStudent.Name}"); Console.ReadLine(); } } }
ผลลัพธ์
ผลลัพธ์ของโค้ดด้านบนคือ
LastOrDefault: 1 Jill Last: 1 Jill
ตัวอย่าง
using System; using System.Collections.Generic; using System.Linq; namespace DemoApplication { class Program { static void Main(string[] args) { try { var studentsList = new List<Student> { new Student { Id = 1, Name = "John" }, new Student { Id = 2, Name = "Jack" } }; var lastOrDefaultStudent = studentsList.LastOrDefault(student => student.Id == 3); var value = lastOrDefaultStudent == null ? "null" : ""; Console.WriteLine($"LastOrDefault: {value}"); var lastStudent = studentsList.Last(student => student.Id == 3); } catch (Exception ex) { Console.WriteLine($"Last Exception: {ex.Message}"); Console.ReadLine(); } } } public class Student { public int Id { get; set; } public string Name { get; set; } } }
ผลลัพธ์
ผลลัพธ์ของโค้ดด้านบนคือ
LastOrDefault: null Last Exception: Sequence contains no matching element
ที่นี่ไม่มีรหัส "3" ในรายชื่อนักเรียน ดังนั้น LastOrDefault() จึงคืนค่า null ในขณะที่ Last() กำลังส่งข้อยกเว้น