Получение первого элемента элемента 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);

Если ваш .Net 3.5 или выше

Adapter.GetData().First()

вы не можете использовать result.First()?


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

    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);
    }