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

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

但是,我希望它返回一个我select的实体数组,那么完成这个的最好方法是什么? 我可以通过它枚举并构build数组,或者使用CopyTo()定义的数组。

有没有更好的办法? 我采用了CopyTo方法。

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

如果您只有一个非genericsIEnumerable,请执行以下操作:

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

如果您不知道该方法中的types,但该方法的调用者知道该方法,请使该方法为通用方法,并尝试执行以下操作:

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

将以下内容放在.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(); 

我觉得重新发明轮子…

 public static T[] ConvertToArray<T>(this IEnumerable<T> enumerable) { if (enumerable == null) throw new ArgumentNullException("enumerable"); return enumerable as T[] ?? enumerable.ToArray(); } 

如果你没有Linq,我用下面的方法解决它:

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

希望能帮助到你