所以,我创建了一个列表:
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#的内部工作原理。 它有效吗?大可能吗?
答案 0 :(得分:1)
“typeof”是否包含可点击的类型?
不,它没有。 ClickableEntity
和Clickable
是两种不同的类型,因此它们是字典中的不同键。
您可以只使用一个List<Entity>
,而不是字典,并使用OfType
过滤它:
protected List<Entity> entities;
foreach (var c in entities.OfType<Clickable>())
{
... Perform click
}