使用Type作为键迭代列表

时间:2014-02-10 22:22:33

标签: c# inheritance ienumerable typeof

所以,我创建了一个列表:

protected Dictionary<Type, List<Entity>> entities;

上面显示的实体继承了多个接口,例如Clickable,Hoverable和Focusable。

我的问题是迭代它们,我需要一种允许快速呈现整个列表的方法,即:

foreach (KeyValuePair<Type, List<Entity>> entry in entities)
{
    foreach (Entity e in entry.Value)
    {
        e.Render(delta, drawingContext);
    }
}

并且还允许迭代各个继承的类型:

 foreach (Clickable c in entities[typeof(Clickable)])
 {
     ... Perform click
 }

我的问题: “typeof”是否包含可点击的类型? e.g:

 abstract class ClickableEntity : Entity, Clickable

我的问题是效率和可扩展性,我知道我可以使用多个列表,但这种方法可以让我理解c#的内部工作原理。 它有效吗?大可能吗?

1 个答案:

答案 0 :(得分:1)

  

“typeof”是否包含可点击的类型?

不,它没有。 ClickableEntityClickable是两种不同的类型,因此它们是字典中的不同键。

您可以只使用一个List<Entity>,而不是字典,并使用OfType过滤它:

 protected List<Entity> entities;

 foreach (var c in entities.OfType<Clickable>())
 {
     ... Perform click
 }