Linq C# 中的 Last() 和 LastOrDefault() 有什么区别?

csharpserver side programmingprogramming更新于 2025/10/2 2:37:17

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

此处,id"3"在 studentsList 中不存在。因此 LastOrDefault() 返回 null 值,而 Last() 则抛出异常。


相关文章