2012-02-29 55 views
8

に配列にするIListを変換します 私のコードを参照してください:私はSystem.InvalidCastExceptionの取得なぜは、私は配列にするIListを変換したいのC#

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

を:ソース配列の少なくとも1つの要素をキャストすることができませんでした宛先アレイタイプにダウンしますか?どのように私はリストののタイプとしてのリストを使用することができないと解決することができますリスト変数?

更新1:私は.NET 1.1を使用しています。だから私はジェネリックス、Linqなどを使用することはできません。私はちょうど最も一般的なケースの結果を受け取りたい - 整数は例として与えられた、私はこのコードがすべてのタイプのために働くので、私はの配列を使用している(多分私は配列を使用して間違っているが、 )。

+3

ArrayListのは時代遅れです。代わりに 'List 'を使用してください。 – asawyer

+1

.NET 2.0を使用していますか?あなたがそうでなければ、これはジェネリックコレクションでもっと簡単になります。 –

+1

http://stackoverflow.com/questions/268671/best-way-to-convert-ilist-or-ienumerable-to-array – Jason

答えて

26

Arrayの値に作成しています。 1はArrayではなく、intです。 ...代わりにArrayListの使用リスト、IList<T>代わりなど

IListのEDIT開始する非ジェネリック型を使用しない、理想的には、

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

のか:あなたは持っている必要があることに注意してください3行目は簡単に:

Array array = new object[list.Count]; 

とすることができます。

+0

ニースキャッチ!私は彼がArrayオブジェクトでコンストラクタを使用していたと考えていました。 –

+1

@Jon配列の要素の型がわからない場合はどうすればよいですか?整数はちょうど例 - 私はジェネリックスなしでより一般的なアプローチが必要です –

+0

@MichaelZ:代わりに 'object []'を使うことができます。 –

4

私は

Array array = new Array[list.Count]; 

でもコンパイルされることを驚いているが、それはあなたがそれがやりたいことはありません。 use

object[] array = new object[list.Count]; 

標準的な発言:C#3以降を使用できる場合は、可能な限りArrayListを避けてください。 List<int>

+0

配列の配列なのでコンパイルされます。 –

15

あなたはキャストを使用することができますし、てToArray:

Array array = list.Cast<int>().ToArray(); 
関連する問題