【问题标题】:foreach inherited (sub-class) object in a super-class listforeach 超类列表中的继承(子类)对象
【发布时间】:2010-06-09 15:53:22
【问题描述】:

我有一个名为“ClassA”的超类和两个子类“Class1”和“Class2”。

我有一个包含“Class1”和“Class2”对象的列表,该列表属于“ClassA”类型。
我想通过执行类似的操作仅循环列表中的“Class1”对象

List<ClassA> AList = new List<ClassA>;
AList.Add(new Class1());
AList.Add(new Class2());

foreach (Class1 c1 in AList)
{
    // Do Something
}

但是当我这样做时,代码会在到达非“Class1”类型的对象时引发异常。

如何以简单的方式完成此操作,而无需检查列表中对象的类型并在其类型是否正确时进行转换。像这样:

foreach (ClassA cA in AList)
{
    if (cA.GetType() == typeof(Class1))
    {
        // Do Something
    }
}

【问题讨论】:

    标签: c# .net inheritance


    【解决方案1】:

    使用 LINQ:

    foreach (Class1 c1 in AList.OfType<Class1>()) { }
    

    请注意,如果您想检查循环中的类型,asis 运算符就是为此而生的。喜欢:

    foreach (ClassA cA in AList) {
      Class1 c1 = cA as Class1;
      if (c1 != null) {
        // do something
      }
    }
    

    【讨论】:

    • 我必须使用 .NET 2.0 并且不能使用 LINQ
    【解决方案2】:
    foreach(Class1 c1 in AList.OfType<Class1>())
    {
        //do something
    }
    

    【讨论】:

    • 我必须使用 .NET 2.0 并且不能使用 LINQ
    猜你喜欢
    • 2011-05-26
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多