ทั้ง 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() กำลังส่งข้อยกเว้น