156. ElementAt Extension Method

לעתים אנחנו מעוניינים להשיג איבר שהוא לא בהכרח ראשון מתוך אוסף.

למרבה המזל, יש Extension Method בLINQ שמסוגל לעשות זאת:

1
2
3
4
5
6
IEnumerable<int> theNumbers =
new[] { 4, 8, 15, 16, 23, 42 };
Console.WriteLine(theNumbers.ElementAt(0)); // 4
Console.WriteLine(theNumbers.ElementAt(3)); // 16
Console.WriteLine(theNumbers.ElementAt(6)); // ArgumentOutOfRangeException

המימוש שלו יודע להתחשב באם מדובר בIList ובמידה וכן, משתמש בIndexer שלו:

1
2
3
4
5
6
7
8
9
10
11
12
13
public static TSource ElementAt<TSource>(this IEnumerable<TSource> source, intindex)
{
IList<TSource> list = source as IList<TSource>;
if (list != null)
{
return list[index];
}
using (IEnumerator<TSource> enumerator = source.GetEnumerator())
{
// Iterate index times.
}
}

אם אנחנו רוצים להמנע מException כאשר אנחנו חורגים מגבולות האוסף, נוכל להשתמש במקום בExtension Method ששמו ElementAtOrDefault, למשל:

1
2
Console.WriteLine(theNumbers.ElementAtOrDefault(3)); // 16
Console.WriteLine(theNumbers.ElementAtOrDefault(6)); // 0

המזכיר את הExtension Method ששמו FirstOrDefault (ראו גם טיפ מספר 154 שנשלח ביום חמישי האחרון)

המשך יום במקום

שתף