将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; }
希望能帮助到你