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。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册