获取IEnumerable项的第一个元素

Dav*_*eng 8 c# generics

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();
}
Run Code Online (Sandbox Code Playgroud)

在不使用循环的情况下检索第一个元素的最佳方法是什么?

var result = Adapter.GetData();
Run Code Online (Sandbox Code Playgroud)

man*_*lds 14

简而言之:

enumerator=result.GetEnumerator();
enumerator.MoveNext();
enumerator.Current;
Run Code Online (Sandbox Code Playgroud)

这是foreach在循环中迭代遍历所有元素的行为.

合适的方式:

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

}

使用LINQ:

var e = result.First();
Run Code Online (Sandbox Code Playgroud)

要么

var e = result.FirstOrDefault(default);
Run Code Online (Sandbox Code Playgroud)

也:

var e = result.ElementAt(0);
Run Code Online (Sandbox Code Playgroud)