我正在尝试确定对象x是否是列表。它可以是任何类型的列表,也可以是任何通用参数。
如果是,那么我想迭代它,如果是的话。这是我能想到的最好的,但由于编译错误而失败
if(x is List){
foreach(Object o in (List)x){
;
}
}
我该怎么做?
答案 0 :(得分:2)
最简单的方法是投射到IList。这是一个非通用的接口,可以通过非通用列表(例如ArrayList)实现,但我猜你不会担心:
if (x is IList) {
foreach (object o in (IList)x) {
// ...
}
}
(如果你需要做的只是foreach,你甚至不需要IList:IEnumerable就足够了。)
请注意,非通用IList和IEnumerable位于System.Collections命名空间中,默认情况下不使用。因此,您需要添加using System.Collections;
(感谢Reed Copsey注意到这一点)。
答案 1 :(得分:2)
您可以使用“as”来保存演员:
var xList = x as IList;
if(x != null) {
foreach(object o in xList){
// ...
}
}
答案 2 :(得分:0)
if (x.GetType().IsInstanceOfType(typeof(IList<string>)))
{
foreach (Object o in x) // replace with you type
{ }
}