代码之家  ›  专栏  ›  技术社区  ›  Casebash

标识对象是否为列表类型并对其进行迭代

  •  0
  • Casebash  · 技术社区  · 16 年前

    我试图确定一个对象x是否是一个列表。它可以是任何类型的列表,并且具有任何泛型参数。

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

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

    我该怎么做?

    3 回复  |  直到 16 年前
        1
  •  2
  •   itowlson    16 年前

    最简单的方法是 IList . 这是一个非通用接口,可以由非通用列表(如arraylist)实现,但我猜这不会引起您的关注:

    if (x is IList) {
      foreach (object o in (IList)x) {
        // ...
      }
    }
    

    (如果你所需要做的只是为每个人做准备,你甚至不需要iList:IEnumerable就足够了。)

    请注意,非泛型IList和IEnumerable位于System.Collections命名空间中,默认情况下不使用ED。所以你需要添加 using System.Collections; (感谢Reed Copsey注意到这一点)。

        2
  •  2
  •   Michael Stum    16 年前

    可以使用“as”保存演员表:

    var xList = x as IList;
    if(x != null) {
        foreach(object o in xList){
          // ...
        }
    }
    
        3
  •  0
  •   Asad    16 年前
    if (x.GetType().IsInstanceOfType(typeof(IList<string>)))
    {
      foreach (Object o in x) // replace with you type
      { }
    }