当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《将IList或IEnumerable转换为Array的最佳方法》经验,为你挑选了3个好方法。

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

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

有没有更好的方法?我选择了CopyTo方法.



1> Jon Skeet..:

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

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

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

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

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


`ToArray`扩展方法在`System.Linq`命名空间中,认为可能很好知道:).
@Shimmy:是的......除了其他任何东西,它告诉编译器期望什么样的数组!如果你只想要`object []`,只需使用`Cast `.非泛型`IEnumerable`没有`ToArray`扩展方法,所以你不能只调用`foo.ToArray `或类似的东西.
不 - 只有一种扩展方法.(它不在界面本身内.)

2> 小智..:

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

using System.Linq;

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

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

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


由于使用System.Linq而被upvoted;

3> Philippe Mat..:

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

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

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

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有