我从在循环中使用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();
最佳答案
简而言之:
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);