例如,我有一个基类Entity,然后有两个从此派生的子类LightEntityPlayerEntity

然后,我有一个List<Entity> Entities,其中包含LightEntityPlayerEntity

我希望从LightEntity获得所有Entities

我试过:

List<LightEntity> lights = new List<LightEntity>();
foreach (Entity ent in Entities)
{
    if(ent is LightEntity)
    {
        lights.Add(ent);
    }
}

但是它不喜欢这样,因为编译器似乎仍然认为它可能会尝试仅将Entity添加到LightEntity列表中。

我试图将ent转换为LightEntity,但是编译器表示它没有将Entity转换为LightEntity的方法。

最佳答案

您可以使用 OfType 按类型过滤实体:

List<LightEntity> lights = new List<LightEntity>();
lights.AddRange(entities.OfType<LightEntity>());

甚至更简单:
List<LightEntity> lights = entities.OfType<LightEntity>().ToList();

进一步阅读
  • Getting Started with LINQ in C#
  • 关于c# - 遍历具有相同基类的对象列表并提取某个类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16471397/

    10-09 15:02