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


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() 抛出异常。

更新于: 08-Aug-2020

737 次浏览

开启你的 职业

完成课程并获得认证

开始吧
广告
© . All rights reserved.