通过具有相同基类的对象列表循环并提取某个类?

Mat*_*ern 6 c# inheritance class object

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

然后List<Entity> Entities,我有一个持有LightEntitys和PlayerEntitys.

我希望得到所有LightEntity从s Entities.

我试过了:

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

但它并不喜欢这样,因为编译器似乎仍然认为它可能会尝试仅添加Entity一个列表LightEntity.

我试图转向ent,LightEntity但编译器说它没有将Entitya 转换为a的方法LightEntity.

p.s*_*w.g 13

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

List<LightEntity> lights = new List<LightEntity>();
lights.AddRange(entities.OfType<LightEntity>());
Run Code Online (Sandbox Code Playgroud)

甚至更容易:

List<LightEntity> lights = entities.OfType<LightEntity>().ToList();
Run Code Online (Sandbox Code Playgroud)

进一步阅读


Kyl*_*e C 5

只是把它转换为(LightEntity)所以

Lights.Add((LightEntity)ent);
Run Code Online (Sandbox Code Playgroud)