LINQ 元素运算符 ElementAt,ElementAtOrDefault

元素运算符从序列(集合)中返回特定元素。

下表列出了LINQ中的所有Element运算符。

元素运算符(方法)描述
ElementAt返回集合中指定索引处的元素
ElementAtOrDefault返回集合中指定索引处的元素;如果索引超出范围,则返回默认值。
First返回集合的第一个元素,或满足条件的第一个元素。
FirstOrDefault返回集合的第一个元素,或满足条件的第一个元素。如果索引超出范围,则返回默认值。
Last返回集合的最后一个元素,或满足条件的最后一个元素
LastOrDefault返回集合的最后一个元素,或满足条件的最后一个元素。如果不存在这样的元素,则返回默认值。
Single返回集合中的唯一元素,或唯一满足条件的元素。
SingleOrDefault返回集合中的唯一元素,或唯一满足条件的元素。如果不存在这样的元素,或者该集合不完全包含一个元素,则返回默认值。

ElementAt()方法从给定集合返回指定索引中的元素。如果指定的索引超出集合的范围,则它将抛出“索引超出范围(Index out of range exception)”异常。请注意,索引是从零开始的索引。

ElementAtOrDefault()方法还从协作中返回指定索引中的元素,如果指定索引不在集合的范围内,则它将返回数据类型的默认值,而不是引发错误。

下面的示例演示原始集合上的ElementAt和ElementAtOrDefault方法。

IList<int> intList = new List<int>() { 10, 21, 30, 45, 50, 87 };
IList<string> strList = new List<string>() { "One", "Two", null, "Four", "Five" };

Console.WriteLine("intList中的第一个元素: {0}", intList.ElementAt(0));
Console.WriteLine("strList中的第一个元素: {0}", strList.ElementAt(0));
		
Console.WriteLine("intList中的第二个元素: {0}", intList.ElementAt(1));
Console.WriteLine("strList中的第二个元素: {0}", strList.ElementAt(1));
		
Console.WriteLine("intList中的第三个元素: {0}", intList.ElementAtOrDefault(2));
Console.WriteLine("strList中的第三个元素: {0}", strList.ElementAtOrDefault(2));

Console.WriteLine("intList中的第10个元素: {0} - 默认int值", 
                intList.ElementAtOrDefault(9));		
Console.WriteLine("strList中的第十个元素: {0} - 默认字符串值(null)",
                 strList.ElementAtOrDefault(9));		
		
		
Console.WriteLine("intList. ElementAt (9)抛出异常: 索引超出范围");
Console.WriteLine("-------------------------------------------------------------");
Console.WriteLine(intList.ElementAt(9));
输出:
intList中的第一个元素:10 
strList中的第一个元素:
intList中的第二元素:21 
strList中的第二个元素:   
intList中的第三个元素:30 
strList中的第三个元素:

intList中的第十个元素:0 - 默认int值
strList中的第十个元素:- 默认字符串值(null)
----------------------------- --------------------------------
intList. ElementAt (9)抛出异常: 索引超出范围

正如您在上面示例中所看到的那样,intList.ElementAtOrDefault(9)返回0(默认值为int),因为intList不包含第十元素。 然而,intList.ElementAt(9)以相同的方式抛出“索引超出范围”,(9)返回null,它是字符串类型的默认值。 (控制台显示空白空间,因为它不能显示空)

因此,建议使用 ElementAtOrDefault 扩展方法来消除运行时异常的可能性。

在下一节中,将了解另一个元素运算符First和FirstOrDefault。