我想確定一個對象x是否是一個列表。它可以是任何類型的列表和任何通用參數。識別一個對象是否是List類型並迭代它
如果是這樣,那麼我想重複它,如果它是。這是我能想到的最好的,但由於彙編錯誤而失敗
if(x is List){
foreach(Object o in (List)x){
;
}
}
我該怎麼做?
我想確定一個對象x是否是一個列表。它可以是任何類型的列表和任何通用參數。識別一個對象是否是List類型並迭代它
如果是這樣,那麼我想重複它,如果它是。這是我能想到的最好的,但由於彙編錯誤而失敗
if(x is List){
foreach(Object o in (List)x){
;
}
}
我該怎麼做?
最簡單的方法是投射到IList。這是一個非通用接口,並可以通過非泛型列表(例如ArrayList)來實現,但我猜會不會是你所關心:
if (x is IList) {
foreach (object o in (IList)x) {
// ...
}
}
(如果你需要do是foreach,你甚至不需要IList:IEnumerable就足夠了。)
請注意,非泛型IList和IEnumerable位於System.Collections命名空間中,默認情況下它不是使用-ed。因此,您需要添加using System.Collections;
(感謝Reed Copsey注意到這一點)。
if (x.GetType().IsInstanceOfType(typeof(IList<string>)))
{
foreach (Object o in x) // replace with you type
{ }
}
if條款將起作用,但它仍然會給foreach上的編譯器錯誤。 – itowlson 2010-02-24 02:18:44
這是什麼錯誤?如果x = 'IList
當然,它將在該代碼片段中編譯,因爲x已編譯時間類型爲IList
您可以使用「爲」保存一投:
var xList = x as IList;
if(x != null) {
foreach(object o in xList){
// ...
}
}
我仍然得到:使用通用型「System.Collections.Generic.IList」 –
Casebash
2010-02-24 02:10:24
確保添加「使用系統.Collections;」在文件的頂部。 itowlson的代碼應該可以工作。 – 2010-02-24 02:11:37