我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)