编辑
2025-02-04
C# 应用
00
请注意,本文编写于 91 天前,最后修改于 91 天前,其中某些信息可能已经过时。

目录

摘要
正文
ElementAt 根据索引
First 取得第一个元素
Last 取是最后一个元素
Single 取得单个元素
使用注意点:

摘要

在C#中,LINQ (Language Integrated Query) 提供了一系列的查询元素运算符,这些运算符可以用于从序列中检索特定的元素。这些运算符包括但不限于 FirstFirstOrDefaultSingleSingleOrDefaultLastLastOrDefaultElementAtElementAtOrDefault

正文

操作描述
ElementAt返回一个特定的索引中的一个元素存在于一个集合
ElementAtOrDefault相同于ElementAt,它也将返回默认值,特定索引超出范围返回默认值
First检索的集合或第一元件满足特定的条件中的第一个元素
FirstOrDefault相同First除了返回一个默认值没有存在这样的元素
Last检索最后一个出现在集合或最后一个元素的元素满足特定条件
LastOrDefault相同Last除了返回一个默认值没有存在任何这样的元素
Single返回集合的唯一元素或唯一元素满足一定条件
SingleOrDefault相同单除了它也返回一个默认值,如果没有存在任何这样的唯一元素
DefaultIfEmpty返回默认值,如果集合或列表为空或null

ElementAt 根据索引

C#
private void btnSearch_Click(object sender, EventArgs e) { List<Hero> heroes = new List<Hero> { new Hero("张飞",38,100,"蜀"), new Hero("刘备",40,101,"蜀"), new Hero("关羽",39,102,"蜀"), new Hero("曹操",45,103,"魏"), new Hero("孙权",31,104,"吴"), new Hero("黄忠",45,105,"蜀"), new Hero("夏侯惇",45,106,"魏") }; var ret=heroes.ElementAt(new Random().Next(0, heroes.Count)); MessageBox.Show(ret.Name); }

image.png

  • ElementAt:根据指定的索引返回序列中的元素。如果索引超出范围,则抛出 ArgumentOutOfRangeException
  • ElementAtOrDefault:根据指定的索引返回序列中的元素;如果索引超出范围,则返回默认值。

First 取得第一个元素

C#
private void btnSearch_Click(object sender, EventArgs e) { List<Hero> heroes = new List<Hero> { new Hero("张飞",38,100,"蜀"), new Hero("刘备",40,101,"蜀"), new Hero("关羽",39,102,"蜀"), new Hero("曹操",45,103,"魏"), new Hero("孙权",31,104,"吴"), new Hero("黄忠",45,105,"蜀"), new Hero("夏侯惇",45,106,"魏") }; var ret = heroes.First(x => x.Age > 40);//找到大小40岁的第一个人 MessageBox.Show(ret.Name); }
  • First:返回序列中的第一个元素。如果序列为空,则抛出 InvalidOperationException
  • FirstOrDefault:返回序列中的第一个元素;如果序列为空,则返回默认值(对于引用类型为 null,对于值类型为其默认值)。

Last 取是最后一个元素

C#
private void btnSearch_Click(object sender, EventArgs e) { List<Hero> heroes = new List<Hero> { new Hero("张飞",38,100,"蜀"), new Hero("刘备",40,101,"蜀"), new Hero("关羽",39,102,"蜀"), new Hero("曹操",45,103,"魏"), new Hero("孙权",31,104,"吴"), new Hero("黄忠",45,105,"蜀"), new Hero("夏侯惇",45,106,"魏") }; var ret = heroes.Last(x => x.Age > 40);//找到大小40岁的第后一个人 MessageBox.Show(ret.Name); }

image.png

  • Last:返回序列中的最后一个元素。如果序列为空,则抛出 InvalidOperationException
  • LastOrDefault:返回序列中的最后一个元素;如果序列为空,则返回默认值。

Single 取得单个元素

C#
private void btnSearch_Click(object sender, EventArgs e) { List<Hero> heroes = new List<Hero> { new Hero("张飞",38,100,"蜀"), new Hero("刘备",40,101,"蜀"), new Hero("关羽",39,102,"蜀"), new Hero("曹操",45,103,"魏"), new Hero("孙权",31,104,"吴"), new Hero("黄忠",45,105,"蜀"), new Hero("夏侯惇",45,106,"魏") }; var ret = heroes.Single(x => x.HeroNo==104);//如果找到多个会报错 MessageBox.Show(ret.Name); }

image.png

  • Single:确保序列中仅有一个元素,并返回该元素。如果序列为空或包含多个元素,则抛出异常。
  • SingleOrDefault:确保序列中最多只有一个元素,并返回该元素;如果序列为空,则返回默认值。

使用注意点:

  • 在使用这些运算符时,应确保对其行为和适用场景有足够的理解,以避免出现异常或不符合预期的结果。
  • 特别是对于 SingleSingleOrDefault,在使用时要确保序列中的元素数量符合预期,以避免运行时错误。

LINQ查询元素运算符为从集合中检索数据提供了强大而灵活的手段,使得数据访问更加直观和方便。

本文作者:rick

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!