回答:
どのバージョンの.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;
}
object[]
ちょうど使用したい場合Cast<object>
。非ジェネリックにIEnumerable
はToArray
拡張メソッドがないため、単に呼び出しfoo.ToArray<object>
たり、そのようなことはできません。
ToArray
拡張メソッドは、であるSystem.Linq
、名前空間、それが:)を知ってもいいかもしれないと思いました。
以下を.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();
}
ToArray()
呼び出しのステップへの新しい割り当て/コピーをスキップします(内部Buffer
クラス経由)...誰かが「標準「コピー動作、彼らはかなり驚かれることでしょう。
IEnumerable.ToArray()