返回LINQ大全首页
目录
ElementAt()
- ElementAt()
- ElementAtOrDefault()
对于数组和List
类,[]
提供了索引器,因此很容易在指定的索引处获取元素。除了用[]
访问以外,我们还可以用ElementAt()
获取元素。并且ElementAt()
可以获取所有继承IEnumerable
类的元素。
public static TSource ElementAt( this IEnumerable source, int index );
MSDN
代码示例:
public static class Program
{
//指定索引
private static readonly int SELECTED_INDEX = 4;
static void Main( string[] args )
{
int[] numbers = new int[] { 1, 2, 3, 5, 7, 11 };
int result = numbers.ElementAt( SELECTED_INDEX );
System.Console.WriteLine( "数据:{0}", numbers.Text() );
System.Console.WriteLine( "指定索引:{0}", SELECTED_INDEX );
System.Console.WriteLine( "结果:{0}", result );
System.Console.ReadKey();
}
public static string Text( this IEnumerable i_source )
{
string text = string.Empty;
foreach( var value in i_source )
{
text += string.Format( "[{0}], ", value );
}
return text;
}
}
数据:[1], [2], [3], [5], [7], [11],
指定索引:4
結果:7
因为ElementAt()
作用和[]
差不多,所以使用的比较少。不过用在自己创建的序列类上还是比较好用的。
无论是ElementAt()
还是[]
都会存在一个问题,就是在超出索引范围的情况下会报异常,而ElementAtOrDefault()
就不会有这个问题。在出现异常的情况下会返回该类型的默认值。
public static TSource ElementAtOrDefault( this IEnumerable source, int index );
代码示例:
public static class Program
{
//负数
private static readonly int SELECTED_INDEX = -1;
static void Main( string[] args )
{
int[] numbers = new int[] { 1, 2, 3, 5, 7, 11 };
int result = 0;
try
{
result = numbers.ElementAtOrDefault( SELECTED_INDEX );
}
catch( System.Exception i_exception )
{
System.Console.WriteLine( "异常:{0}", i_exception );
System.Console.ReadKey();
return;
}
System.Console.WriteLine( "数据:{0}", numbers.Text() );
System.Console.WriteLine( "指定索引:{0}", SELECTED_INDEX );
System.Console.WriteLine( "结果:{0}", result );
System.Console.ReadKey();
}
public static string Text( this IEnumerable i_source )
{
string text = string.Empty;
foreach( var value in i_source )
{
text += string.Format( "[{0}], ", value );
}
return text;
}
}
数据:[1], [2], [3], [5], [7], [11],
指定索引:-1
结果:0
无论是超出索引范围或是使用负数,都会返回默认值。 但是这种便利也是一把双刃剑,比如说使用的int
类型,你无法判断是找到了0还是返回的默认值。