Получение первого элемента элемента IEnumerable
Я возвращаюIEnumerable<object[]>
элемент из функции, которая использует yield return
в цикле.
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();
}
каков наилучший способ получить первый элемент без использования цикла предпочтительно?
var result = Adapter.GetData();
5 ответов
короче:
enumerator=result.GetEnumerator();
enumerator.MoveNext();
enumerator.Current;
это то, что цикл foreach в цикле перебрать все элементы.
правильно:
using (IEnumerator<object[]> enumerator = result.GetEnumerator()) {
if (enumerator.MoveNext()) e = enumerator.Current;
}
С LINQ:
var e = result.First();
или
var e = result.FirstOrDefault(default);
также:
var e = result.ElementAt(0);
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);
}