Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

Last() และ LastOrDefault() ใน Linq C # แตกต่างกันอย่างไร


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