Kadang kita hanya butuh satu elemen: nilai pertama, nilai terakhir, atau satu-satunya yang cocok. Operator element mengambil elemen tersebut secara langsung, dan keluarga *OrDefault menentukan apa yang terjadi bila tidak ada elemen yang memenuhi.
Mengambil Elemen Tunggal #
Contoh berikut memakai beberapa operator sekaligus, lalu menangkap dua exception yang muncul bila syarat tidak terpenuhi:
int[] nilai = { 85, 60, 90, 45, 75 };
Console.WriteLine($"First: {nilai.First()}");
Console.WriteLine($"Pertama >= 75: {nilai.First(n => n >= 75)}");
Console.WriteLine($"Last < 70: {nilai.Last(n => n < 70)}");
Console.WriteLine($"ElementAt 2: {nilai.ElementAt(2)}");
Console.WriteLine($"FirstOrDefault > 100: {nilai.FirstOrDefault(n => n > 100)}");
Console.WriteLine($"Single == 60: {nilai.Single(n => n == 60)}");
try
{
Console.WriteLine(nilai.First(n => n > 100));
}
catch (InvalidOperationException e)
{
Console.WriteLine($"Galat: {e.Message}");
}
try
{
Console.WriteLine(nilai.Single(n => n >= 70));
}
catch (InvalidOperationException e)
{
Console.WriteLine($"Galat: {e.Message}");
}Output yang Dihasilkan:
First: 85
Pertama >= 75: 85
Last < 70: 45
ElementAt 2: 90
FirstOrDefault > 100: 0
Single == 60: 60
Galat: Sequence contains no matching element
Galat: Sequence contains more than one matching elementMari kita bedah baris demi baris:
nilai.First(): elemen pertama; melempar exception bila urutan kosong.nilai.First(n => n >= 75): elemen pertama yang memenuhi predikat.nilai.Last(n => n < 70): elemen terakhir yang memenuhi predikat.nilai.ElementAt(2): elemen pada indeks ke-2, dihitung dari nol.nilai.FirstOrDefault(n => n > 100): tidak ada yang memenuhi, sehingga dikembalikan nilai defaultintyaitu0, tanpa exception.- dua pesan galat: kedua baris
Galat:adalah pesan asli .NET 9 saat syarat tidak terpenuhi dan saat memenuhi lebih dari satu elemen.
Versi *OrDefault mengembalikan null untuk tipe referensi dan nilai default untuk tipe nilai. LastOrDefault dan ElementAtOrDefault berperilaku sama, sehingga kueri lebih tahan terhadap data kosong tanpa blok try-catch. Dengan pilihan ini, baca kode menjadi lebih mudah: operator tanpa akhiran OrDefault menyatakan ekspektasi bahwa data seharusnya ada, sedangkan operator dengan akhiran itu menyatakan bahwa hasil kosong adalah kondisi normal.
Untuk List<T>, ElementAt(i) setara dengan indeks nilai[i], tetapi operator ini bekerja pada IEnumerable<T> apa pun yang tidak menawarkan pengakses indeks. Pada sumber besar, perhatikan juga bahwa Last harus menelusuri seluruh sumber sampai selesai karena operator tidak dapat menghentikan iterasi lebih awal.