HomeSearch

C# ElementAtOrDefault, ElementAt Use

These C# examples use the ElementAtOrDefault and ElementAt methods. They require the System.Linq namespace.

ElementAtOrDefault.

ElementAtOrDefault accesses an element. It handles an out-of-range access without throwing an exception. It returns a default value in this case. ElementAt meanwhile will throw an error on nonexistent indexes.

Example.

In this program we create a three-element array. The only valid indexes to access are 0, 1 and 2. We show how ElementAtOrDefault works on valid indexes, and also out-of-range indexes.

Tip: On out-of-range accesses, ElementAtOrDefault returns the default value for the type, which for int is 0.

Default
C# program that uses ElementAtOrDefault using System; using System.Linq; class Program { static void Main() { int[] array = { 4, 5, 6 }; int a = array.ElementAtOrDefault(0); int b = array.ElementAtOrDefault(1); int c = array.ElementAtOrDefault(-1); int d = array.ElementAtOrDefault(1000); Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c); Console.WriteLine(d); } } Output 4 5 0 0

Conceptually,

ElementAtOrDefault can make a collection be infinite. It can make every possible index returning a valid value—the default value—if it is not actually present in memory.

And: This could be useful if a collection is queried for invalid indexes, and actual stored values are not necessary for the algorithm.

ElementAt.

ElementAt gets an element at an index. In many IEnumerable types, you cannot directly index a certain element. Instead of using a foreach-loop or other techniques, we can use the ElementAt method from System.Linq.

To start: This program uses an array of three string literal elements. Arrays are IEnumerable collections.

ArrayIEnumerable

And: We can index this array through the ElementAt method in the System.Linq namespace.

Warning: The method call with argument 3 throws a System.ArgumentOutOfRangeException.

ArgumentOutOfRangeException
C# program that uses ElementAt method using System; using System.Linq; class Program { static void Main() { // Input array. string[] array = { "Dot", "Net", "Perls" }; // Test ElementAt for 0, 1, 2. string a = array.ElementAt(0); Console.WriteLine(a); string b = array.ElementAt(1); Console.WriteLine(b); string c = array.ElementAt(2); Console.WriteLine(c); // This is out of range. string d = array.ElementAt(3); } } Output Dot Net Perls Unhandled Exception: System.ArgumentOutOfRangeException: Index was out of range.

This program

does not demonstrate real-world usage of the ElementAt method. In this program, we could just directly use the indexer on the array variable itself. It does show the syntax of the method call and a possible exception.

However: If for some reason we only knew the type of the collection was IEnumerable, we could more realistically use ElementAt.

Summary.

These methods can transform how we access collections. ElementAtOrDefault eliminates the need for bounds-checking. But it could create extra complexity if we need to add special casing for the default value.
Home
Dot Net Perls
© 2007-2019 Sam Allen. All rights reserved. Written by Sam Allen, info@dotnetperls.com.