将IList或IEnumerable转换为Array的最佳方法

时间:2008-11-06 13:25:13

标签: c# nhibernate

我有一个HQL查询,可以生成IList结果或IEnumerable结果。

但是,我希望它返回我正在选择的实体数组,实现它的最佳方法是什么?我可以枚举它并构建数组,或者使用CopyTo()定义数组。

还有更好的方法吗?我选择了CopyTo方法。

4 个答案:

答案 0 :(得分:147)

您使用的是哪个版本的.NET?如果它是.NET 3.5,我只需要调用ToArray()并完成它。

如果您只有非通用IEnumerable,请执行以下操作:

IEnumerable query = ...;
MyEntityType[] array = query.Cast<MyEntityType>().ToArray();

如果您不知道该方法中的类型但该方法的调用者确实知道它,请将该方法设为通用并尝试:

public static void T[] PerformQuery<T>()
{
    IEnumerable query = ...;
    T[] array = query.Cast<T>().ToArray();
    return array;
}

答案 1 :(得分:40)

将以下内容放入.cs文件中:

using System.Linq;

然后,您将能够使用System.Linq.Enumerable中的以下扩展方法:

public static TSource[] ToArray<TSource>(this System.Collections.Generic.IEnumerable<TSource> source)

IEnumerable<object> query = ...;
object[] bob = query.ToArray();

答案 2 :(得分:6)

我想重新发明轮子......

public static T[] ConvertToArray<T>(this IEnumerable<T> enumerable)
{
    if (enumerable == null)
        throw new ArgumentNullException("enumerable");

    return enumerable as T[] ?? enumerable.ToArray();
}

答案 3 :(得分:2)

如果您没有Linq,我会通过以下方式解决它:

    private T[] GetArray<T>(IList<T> iList) where T: new()
    {
        var result = new T[iList.Count];

        iList.CopyTo(result, 0);

        return result;
    }

希望有所帮助