首页 / 教程列表 / LINQ教程 / LINQ操作符之ElementAt与ElementAtOrDefault

LINQ操作符之ElementAt与ElementAtOrDefault

610 更新于: 2022-04-28 读完约需 11 分钟

LINQ元素操作符

在之前的几篇文章中,我们系统学习了C#语言中LINQ的聚合操作符,包括:Aggregate,Average,Count,Max,Min,Sum等等。

从本文开始,我们将学习C#语言中LINQ新的操作符—元素操作符

元素操作符:用以返回序列(集合)中的特定元素。

下表列出了LINQ中的所有Element操作符。

操作符 描述
ElementAt 返回集合中指定索引处的元素。
ElementAtOrDefault 返回集合中指定索引处的元素,如果索引超出范围则返回默认值。
First 返回集合的第一个元素,或满足条件的第一个元素。
FirstOrDefault 返回集合的第一个元素,或满足条件的第一个元素。如果索引超出范围,返回默认值。
Last 返回集合的最后一个元素,或满足条件的最后一个元素
LastOrDefault 返回集合的最后一个元素,或满足条件的最后一个元素。如果不存在这样的元素,则返回默认值。
Single 返回集合中的唯一元素,或满足条件的唯一元素。
SingleOrDefault 返回集合中的唯一元素,或满足条件的唯一元素。如果不存在这样的元素或集合不包含恰好一个元素,则返回默认值。

ElementAt和ElementAtOrDefault概述

ElementAt()方法返回给定集合中指定索引位置的元素。如果指定的索引超出集合的范围,则会抛出索引超出范围异常。请注意,index是一个基于0的索引。
ElementAtOrDefault()方法返回集合中指定索引位置的元素,如果指定索引超出了集合的范围,则它将返回该数据类型的默认值,而不是抛出异常。

注:ElementAt()ElementAtOrDefault()方法主要的区别在于:如果指定的索引超出集合的范围,前者会抛出异常,而后者将返回该数据类型的默认值,而不是抛出异常。

ElemantAt返回指定索引位置的元素

下面的示例程序中,创建了一个包含整数的集合numbers,然后使用ElementAt方法获取索引位置为1的元素:

using System;
using System.Collections.Generic;
using System.Linq;

namespace LinqTutorial
{
    public class MyProgram
    {
        static void Main(string[] args)
        {
            var numbers = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            var result = numbers.ElementAt(1);
            Console.WriteLine($"集合numbers中索引位置为1的元素值为:{result}");

            Console.Read();
        }
    }
}

运行结果:

集合numbers中索引位置为1的元素值为:2

ElemantAt超出索引范围

因为数据集合numbers只包含了10个元素,所以索引从0开始到9。现在尝试从索引位置10获取元素,让我们看看会发生什么,如下所示:

using System;
using System.Collections.Generic;
using System.Linq;

namespace LinqTutorial
{
    public class MyProgram
    {
        static void Main(string[] args)
        {
            var numbers = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            var result = numbers.ElementAt(10);
            Console.WriteLine($"集合numbers中索引位置为1的元素值为:{result}");

            Console.Read();
        }
    }
}

运行抛出“索引超出范围”的异常如下:

ElementAt操作空集合

以下是一个使用ElementAt()方法获取空集合的指定索引位置元素的示例:

using System;
using System.Collections.Generic;
using System.Linq;

namespace LinqTutorial
{
    public class MyProgram
    {
        static void Main(string[] args)
        {
            var numbers = new List<int>() { };
            var result = numbers.ElementAt(10);
            Console.WriteLine($"集合numbers中索引位置为1的元素值为:{result}");

            Console.Read();
        }
    }
}

运行后,抛出与上例同样的错误:“索引超出范围异常”。

如果集合为空,或者你为索引位置指定了一个负值,或者你指定的索引位置超出了范围,那么ElementAt()方法将抛出“索引超出范围”的异常。

如果不想在述情况下抛出异常,则可以使用ElementAtOrDefault()方法。

ElementAtOrDefault

ElementAtOrDefault方法与ElementAt方法执行相同的操作,只是当集合为空或所提供的索引值超出范围时,该方法不会抛出异常。在这种情况下,它将根据集合包含的元素的数据类型返回默认值。

与之前ElementAt方法类似,下面的示例程序中,创建了一个包含整数的集合numbers,然后使用ElementAtOrDefault方法获取索引位置为1的元素

using System;
using System.Collections.Generic;
using System.Linq;

namespace LinqTutorial
{
    public class MyProgram
    {
        static void Main(string[] args)
        {
            var numbers = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            var result = numbers.ElementAtOrDefault(1);
            Console.WriteLine($"集合numbers中索引位置为1的元素值为:{result}");

            Console.Read();
        }
    }
}

运行结果:

集合numbers中索引位置为1的元素值为:2

现在尝试从索引位置10获取元素,让我们看看会发生什么,如下所示:

using System;
using System.Collections.Generic;
using System.Linq;

namespace LinqTutorial
{
    public class MyProgram
    {
        static void Main(string[] args)
        {
            var numbers = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            var result = numbers.ElementAtOrDefault(10);
            Console.WriteLine($"集合numbers中索引位置为1的元素值为:{result}");

            Console.Read();
        }
    }
}

运行结果:

集合numbers中索引位置为1的元素值为:0

注:当索引位置超出集合范围时,ElementAtOrDefault方法不会抛出异常,而是返回集合元素数据类型的默认值。这里的集合numbers的数据类型为int,所以result的结果为0

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

发表评论

登录用户才能发表评论, 请 登 录 或者 注册