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() 抛出异常。
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP