2014-04-03 24 views
0

來自Java的.net新來的。我有一行代碼返回ArrayList,但我知道所有的元素都是MyType。我怎樣才能輕鬆地投射到模板ArrayList?要重申的是,我有如何將ArrayList投射到ArrayList <MyType>

ArrayList arr = getArrayList(); 

,我想

ArrayList<MyType> arr = getArrayList(); 

我試圖ArrayList<MyType> arr = getArrayList() as ArrayList<MyType>但它說Class 'System.Collections.ArrayList' does not have type parameters

+4

也許'列表'? – Dmitry

+3

'ArrayList'是泛型之前的一個延期。這可能不是你想要的。 – Magus

+0

@Magus以及Im我堅持得到一個非泛型'ArrayList'作爲我的回報,所以我需要使用它至少有點 –

回答

6

沒有一個通用的ArrayList類型在.net(這是一個Java的東西)。在.Net中,您需要使用List<T>。此外,您不能只投射來進行轉換。你需要這樣做:

List<MyType> arr = getArrayList().Cast<MyType>().ToList(); 

雖然我們在這,你應該檢查你是否真的需要一個列表中的所有,還是一個普通的IEnumerable<MyType>可能是不夠好:

IEnumerable<MyType> arr = getArrayList().Cast<MyType>(); 

var arr = getArrayList().Cast<MyType>(); 
+0

Visual Studios稱它無法解析符號'Cast'。我需要使用某個命名空間嗎?或者也許我使用舊版本的.net?你知道我可以檢查嗎? –

+0

你需要'System.Linq' –

+0

現在它說:「不能從方法組中選擇方法,你打算調用方法嗎?」 –

1

我們在C#List<T>類,這是可能你在尋找的。

List<MyType> arr = new List<MyType>(); 

ArrayList不是一個泛型集合,它不是強typed.If你確信你getArrayList()返回包含MyType類型或某些類型的可轉換爲MyType的唯一項目的集合,你可以使用Enumerable.Cast方法,否則使用OfType方法來防止InvalidCastException

List<MyType> arr = getArrayList().OfType<MyType>().ToList(); 
+0

名單是偉大的和所有,但這不告訴我如何投。 –

0

你可以這樣做:

ArrayList yourList; 

List<MyType> list = yourList.Cast<MyType>().ToList(); 

如果你的ArrayList有任何不是M​​yType的條目,那麼你會得到一個InvalidCastException。

您必須包含System.Linq命名空間。

相關問題