web-dev-qa-db-ja.com

IListをC#の配列に変換します

IListを配列に変換したい:私のコードを見てください:

IList list = new ArrayList();
list.Add(1);
Array array = new Array[list.Count];
list.CopyTo(array, 0);

なぜ私はSystem.InvalidCastException:ソース配列の少なくとも1つの要素を宛先配列タイプにキャストできませんでしたlistの型としてArrayListを使用できないと仮定して、それをどのように解決できるか)変数?

更新1: .NET1.1を使用しています。そのため、GenericsやLinqなどは使用できません。最も一般的なケースの結果を受け取りたいだけです-整数が例として示されています。このコードはすべてのタイプで機能する必要があるため、ここではArrayを使用します(配列の使用について間違っているかもしれませんが、もう一度、一般的なケースが必要です)。

9
Michael Z

配列を作成していますArray値の。 1はintであり、Arrayではありません。あなたが持っている必要があります:

IList list = new ArrayList();
list.Add(1);
Array array = new int[list.Count];
list.CopyTo(array, 0);

または、理想的には、最初に非ジェネリック型を使用しないでください... ArrayListの代わりにListを使用し、IListの代わりにIList<T>を使用します。

編集:3行目は簡単に次のようになる可能性があることに注意してください:

Array array = new object[list.Count];

代わりに。

30
Jon Skeet

CastとToArrayを使用できます。

Array array = list.Cast<int>().ToArray();
19
Joe

おそらく最もコンパクトな解決策はこれです:

Enumerable.Range(0, list.Count).Select(i => list[i]).ToArray();

1