2011-01-17 8 views
2

この変換を実行するための最も簡単な方法は何のオブジェクトにする:のIList <int>は[]

IList<int>

object[]に感謝します。

答えて

1

私はこれが最も簡単ですかどうかわからないんだけど、それは間違いなく、最も効率的です。

var result = new object[list.Count]; 
for (int i = 0; i < list.Count; i++) 
    result[i] = list[i]; //Warning: Inevitable boxing happening here 

編集を:あなたのリストを持つよりもインデックスで何とか遅い場合さIEnumerable<T>インタフェース、その後、 forループをforeachループに置き換えてください。コンパイルされません

(個人的に私は、単にので、彼らは多数の内部オブジェクトを作成し、データを介して複数の非効率的なパスを実行する方法の、効率があってもリモートで関係している分野でEnumerable」sの方法を嫌う。)

+1

これはSLacksの提案よりも効率的ですか? – cs0815

+0

ええ、 'Enumerable.Cast ()'は直ちに破棄される新しい 'CastIterator'オブジェクトを作成します。また、SLaksのメソッドは配列全体を2回通過しますが、このメソッドは1回だけ通過します。さらに(この最後の理由はマイクロオプティマイゼーションの分野に入りますが、それでも有効です)配列を直接索引付けすることは、IList で索引付けする場合と比較しても、ポインタ以外のもので索引付けする方が高速です。 – Mehrdad

+0

@Lambert:なぜ2回アレイを通過するのですか? –

10

使用LINQ:

object[] arr = list.Cast<object>().ToArray(); 
-1

myList.ToArray< object>();

+0

。 – SLaks

+0

'てToArray()')IEnumerableをからのIList 継承@claguardia 'IList' –

+0

から呼び出され、そのてToArrayが(そこにあることはできませんが、唯一のToArray とない私はあなたが正しいと仮定し CodesInChaos

関連する問題