猿教程 Logo

Linq元素操作符:ElementAt, ElementAtOrDefault

元素操作符从序列(集合)返回特定元素。

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

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

ElementAt()方法从给定集合的指定索引返回一个元素。 如果指定的索引超出了集合的范围,那么它将抛出一个Index超出范围的异常。 请注意,索引是一个基于零的索引。

ElementAtOrDefault()方法还从collaction的指定索引返回一个元素,如果指定的索引超出了集合的范围,那么它将返回数据类型的默认值,而不是抛出一个错误。

以下示例演示了基元集合上的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("1st Element in intList: {0}", intList.ElementAt(0));
Console.WriteLine("1st Element in strList: {0}", strList.ElementAt(0));
		
Console.WriteLine("2nd Element in intList: {0}", intList.ElementAt(1));
Console.WriteLine("2nd Element in strList: {0}", strList.ElementAt(1));
		
Console.WriteLine("3rd Element in intList: {0}", intList.ElementAtOrDefault(2));
Console.WriteLine("3rd Element in strList: {0}", strList.ElementAtOrDefault(2));

Console.WriteLine("10th Element in intList: {0} - default int value", 
                intList.ElementAtOrDefault(9));		
Console.WriteLine("10th Element in strList: {0} - default string value (null)",
                 strList.ElementAtOrDefault(9));		
		
		
Console.WriteLine("intList.ElementAt(9) throws an exception: Index out of range");
Console.WriteLine("-------------------------------------------------------------");
Console.WriteLine(intList.ElementAt(9));

运行结果:

1st Element in intList: 10 
1st Element in strList: One 
2nd Element in intList: 21 
2nd Element in strList: 
3rd Element in intList: 30 
3rd Element in strList: Three 
10th Element in intList: 0 - default int value 
10th Element in strList: - default string value (null) 
intList.ElementAt(9) throws an exception: Index out of range 
------------------------------------------------------------- 
Run-time exception: Index was out of range....

从上面的例子可以看到,intList.ElementAtOrDefault(9)返回0(默认值为int),因为intList不包括第10个元素。 然而,intList.ElementAt(9)抛出“索引超出范围”异常。同样的方式,strList.ElementAtOrDefault(9)返回null,这是字符串类型的默认值。 (控制台显示空白,因为它不能显示null)

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

猿教程(www.yuanjiaocheng.net)下一节中了解另一个元素运算符First和FirstOrDefault。


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Linq/linq-element-operator-elementat-elementatordefault.html