Computer >> Máy Tính >  >> Lập trình >> C#

Sự khác biệt giữa Last () và LastOrDefault () trong Linq C # là gì?

Cả Last () và LastOrDefault () sẽ tìm nạp lần xuất hiện cuối cùng của một giá trị. Nhưng sự khác biệt chính giữa Last () và LastOrDefault () là Last () sẽ ném một ngoại lệ nếu không có dữ liệu kết quả cho tiêu chí được cung cấp trong khi LastOrDefault () sẽ trả về giá trị mặc định (null) nếu không có dữ liệu kết quả.

Sử dụng Last () khi chúng ta biết dãy sẽ có ít nhất một phần tử. Sử dụng LastOrDefault () khi chúng tôi không chắc chắn về dữ liệu.

Ví dụ

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();
      }
   }
}

Đầu ra

Đầu ra của đoạn mã trên là

LastOrDefault: 1 Jill
Last: 1 Jill

Ví dụ

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; }
   }
}

Đầu ra

Đầu ra của đoạn mã trên là

LastOrDefault: null
Last Exception: Sequence contains no matching element

Ở đây Id "3" không có trong danh sách sinh viên. Do đó LastOrDefault () trả về giá trị null trong khi Last () trả về một ngoại lệ.