Getting the first element of an IEnumerable element

I am returning an IEnumerable<object[]> element from a function that uses yield return in a loop.

 public static IEnumerable<object[]> GetData() { ... connection.Open(); using (OleDbDataReader dr = command.ExecuteReader()) { while (dr.Read()) { object[] array = new object[dr.FieldCount]; dr.GetValues(array); yield return array; } } connection.Close(); } 

What is the best way to get the first element without using a loop preferably?

 var result = Adapter.GetData(); 
+8
generics c #
source share
5 answers

In short:

 enumerator=result.GetEnumerator(); enumerator.MoveNext(); enumerator.Current; 

This is what foreach does in a loop to iterate over all elements.

The right way:

 using (IEnumerator<object[]> enumerator = result.GetEnumerator()) { if (enumerator.MoveNext()) e = enumerator.Current; 

}

With LINQ:

 var e = result.First(); 

or

 var e = result.FirstOrDefault(default); 

also:

 var e = result.ElementAt(0); 
+14
source share

If your .Net 3.5 or higher

 Adapter.GetData().First() 
+1
source share

You can not use result.First() ?

0
source share
 enumerator=result.GetEnumerator(); enumerator.MoveNext(); enumerator.Current; 
0
source share
  public static T FirstOrDefault<T>(this IEnumerable items) where T : class { var list = items.OfType<T>(); if (list!= null) { return list.FirstOrDefault(); } return default(T); } 
0
source share

All Articles