识别一个对象是否是List类型并迭代它
我想确定一个对象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