【问题标题】:C# - Can you loop through types separately in a generic list?C# - 您可以在通用列表中分别循环遍历类型吗?
【发布时间】:2010-10-18 10:03:54
【问题描述】:

我有 3 个不同的类,一个通用的“实体”类,然后是两个继承它的类,一个子弹类和一个敌人类。

然后我有一个实体类的列表,列表中包含子弹和敌人,以及很多我对待这些的地方。但是,有时,我只想遍历其中一个类,而不是其他类,例如遍历每个子弹,但不是敌人。有没有办法做到这一点?

我试过了

foreach (Bullet tempBullet in entities)

但我得到了错误

无法将“敌人”类型的对象转换为“子弹”类型。

有人知道这是否可行,还是我必须使用单独的列表?

【问题讨论】:

    标签: c# foreach generic-list


    【解决方案1】:

    你或许可以使用一点 Linq:

    foreach (var bullet in entities.OfType<Bullet>())
    {
    
    }
    

    【讨论】:

      【解决方案2】:

      如果您使用的是 .NET 2:

      foreach (Entity ent in entities) {
          Enemy e = ent as Enemy;
          Bullet b = ent as Bullet;
      
          if (e != null) {
              // process enemy
          }
          else if (b != null) {
              // process bullet
          }
      }
      

      或者,使用 linq(而 entities 是一个继承 IEnumerable&lt;T&gt; 的对象):

      foreach (Bullet bullet in entities.OfType<Bullet>()) {
          // process bullets only
      }
      

      【讨论】:

      • 但是你会做两次演员表,因为你大概会在稍后做一个(Enemy)ent
      猜你喜欢
      • 1970-01-01
      • 2011-11-28
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多