获取IEnumerable项的第一个元素

时间:2011-04-29 05:17:12

标签: 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();
}

最好不使用循环来检索第一个元素的最佳方法是什么?

var result = Adapter.GetData();

5 个答案:

答案 0 :(得分:14)

简而言之:

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

答案 1 :(得分:1)

如果您的.Net 3.5或更高版本

Adapter.GetData().First()

答案 2 :(得分:0)

你不能使用result.First()吗?

答案 3 :(得分:0)

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

答案 4 :(得分: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);
    }