识别对象是否是List的类型并迭代它

时间:2010-02-24 02:03:24

标签: c# generics

我正在尝试确定对象x是否是列表。它可以是任何类型的列表,也可以是任何通用参数。

如果是,那么我想迭代它,如果是的话。这是我能想到的最好的,但由于编译错误而失败

if(x is List){
    foreach(Object o in (List)x){
        ;
    }
}

我该怎么做?

3 个答案:

答案 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
  { }
}