当前位置:首页 > C# > 正文

掌握C# LINQ中的First、Last与Single方法(新手入门详细教程)

在C#开发中,LINQ(Language Integrated Query)是一个非常强大的工具,它允许我们以声明式的方式查询集合数据。其中,FirstLastSingle 是三个常用的元素操作方法,用于从序列中获取单个元素。但它们的使用规则和行为各不相同,初学者常常混淆。本文将用通俗易懂的方式,带你彻底搞懂这三种方法的取值规则。

掌握C# LINQ中的First、Last与Single方法(新手入门详细教程) C# LINQ  First方法 Last方法 Single方法 第1张

一、First 方法:获取第一个匹配项

First() 方法用于返回序列中的第一个元素。如果序列为空,则会抛出 InvalidOperationException 异常。

你也可以传入一个条件(谓词),例如 First(x => x > 5),这时它会返回第一个满足条件的元素

var numbers = new List<int> { 1, 3, 5, 7, 9 };var first = numbers.First();           // 返回 1var firstOddOver5 = numbers.First(x => x > 5); // 返回 7// 如果序列为空,以下代码会抛出异常:var emptyList = new List<int>();var result = emptyList.First(); // InvalidOperationException  

💡 小贴士:如果你不确定序列是否为空,可以使用 FirstOrDefault(),它在找不到元素时返回默认值(如 null0),而不会抛出异常。

二、Last 方法:获取最后一个匹配项

Last()First() 类似,但它返回的是序列中的最后一个元素。同样,如果序列为空,也会抛出异常。

var fruits = new List<string> { "Apple", "Banana", "Cherry" };var lastFruit = fruits.Last(); // 返回 "Cherry"var lastWithA = fruits.Last(x => x.Contains("a")); // 返回 "Banana"  

First 一样,LastOrDefault() 可以安全地处理空序列或无匹配项的情况。

三、Single 方法:确保唯一匹配

Single() 的行为与其他两个不同:它要求序列中有且仅有一个元素。如果序列为空,或者包含多个元素,都会抛出 InvalidOperationException

这个方法特别适合用于“主键查询”或“唯一标识”场景,比如从数据库中根据ID查找唯一记录。

var ids = new List<int> { 100 };var uniqueId = ids.Single(); // 正确,返回 100var empty = new List<int>();var r1 = empty.Single(); // 异常:序列为空var multi = new List<int> { 1, 2 };var r2 = multi.Single(); // 异常:多于一个元素// 带条件的 Singlevar users = new List<string> { "Alice", "Bob", "Charlie" };var user = users.Single(x => x == "Bob"); // 正确,返回 "Bob"var user2 = users.Single(x => x.Length > 3); // 异常!因为 "Alice" 和 "Charlie" 都满足  

⚠️ 注意:SingleOrDefault() 在无匹配时返回默认值,但如果匹配项超过一个,依然会抛出异常!

四、总结对比表

方法 空序列 多个匹配 适用场景
First() 异常 返回第一个 获取首个有效项
Last() 异常 返回最后一个 获取最新/末尾项
Single() 异常 异常 确保唯一性(如主键查询)

五、SEO关键词回顾

在本教程中,我们深入讲解了 C# LINQ 中的三个核心方法:C# LINQFirst方法Last方法Single方法。掌握它们的区别和使用场景,能让你写出更安全、更高效的代码。

希望这篇教程对你有所帮助!如果你是初学者,建议多动手写代码测试各种边界情况,加深理解。