2012-02-29 83 views
8

我想的IList轉換爲數組: 請看看我的代碼:轉換的IList到陣列中的C#

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

爲什麼我得到System.InvalidCastException:源數組中至少一個元素無法被投向下到目標陣列類型?假設我不能使用ArrayList作爲類型的列表變量,那麼如何解決?

更新1:我使用.NET 1.1。所以我不能使用泛型,Linq等。我只想接收最常見情況的結果 - 整數作爲示例給出,我需要此代碼適用於所有類型,所以我在這裏使用數組(也許我錯了使用數組,但我需要,再次,普通情況下)。

+3

ArrayList的是過時的。改爲使用'List '。 – asawyer 2012-02-29 21:38:17

+1

您使用的是.NET 2.0嗎?如果你不是這樣,那麼對於通用集合來說,這一切變得更加簡單。 – 2012-02-29 21:38:17

+1

http://stackoverflow.com/questions/268671/best-way-to-convert-ilist-or-ienumerable-to-array – Jason 2012-02-29 21:38:43

回答

26

您正在創建一個數組Array。 1是int,而不是Array。你應該有:

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

或者理想,不使用非泛型類型下手...用列表的IList<T>代替IList

編輯,而不是ArrayList,:請注意,第三行很容易就是:

Array array = new object[list.Count]; 

改爲。

+0

好的,趕上!我在想他是在Array對象上使用構造函數。 – 2012-02-29 21:41:52

+1

@Jon如果我不知道數組中元素的類型,該怎麼辦?整數只是例子 - 我需要更通用的方法(沒有泛型) – 2012-02-29 21:50:39

+0

@MichaelZ:你可以使用'object []'來代替。 – 2012-02-29 21:54:52

4

我很驚訝,

Array array = new Array[list.Count]; 

即使編譯,但你希望它是什麼沒有做。使用

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

並且,標準備註:如果您可以使用C#3或更高版本,請儘可能避免使用ArrayList。您可能更喜歡List<int>

+0

它編譯是因爲它是一個數組數組。 – 2012-02-29 21:42:17

15

你可以用演員和ToArray的:

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