C# 以类型作为键在列表上迭代

C# 以类型作为键在列表上迭代,c#,inheritance,ienumerable,typeof,C#,Inheritance,Ienumerable,Typeof,因此,我创建了一个列表: protected Dictionary<Type, List<Entity>> entities; 关于我的问题: “typeof”是否包括可点击的类型?e、 g: abstract class ClickableEntity : Entity, Clickable 我的问题是效率和可扩展性,我知道我可以使用多个列表,但这种方法允许我理解c#的内部工作原理。 效率高吗?也许是大O “typeof”是否包括可点击的类型 不,没有Clicka

因此,我创建了一个列表:

protected Dictionary<Type, List<Entity>> entities;
关于我的问题: “typeof”是否包括可点击的类型?e、 g:

 abstract class ClickableEntity : Entity, Clickable
我的问题是效率和可扩展性,我知道我可以使用多个列表,但这种方法允许我理解c#的内部工作原理。 效率高吗?也许是大O

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

不,没有
ClickableEntity
Clickable
是两种不同的类型,因此它们在字典中是不同的键

您可以只使用一个
列表
,而不使用字典,并使用类型为的
对其进行过滤:

 protected List<Entity> entities;

 foreach (var c in entities.OfType<Clickable>())
 {
     ... Perform click
 }
受保护的列表实体;
foreach(entities.OfType()中的var c)
{
…执行单击
}

正如我所想。。。你会建议我只使用多个列表吗?@TFC,是的,这可能是我目前使用的最好的类型,它只是被证明很慢(考虑到我在MouseMove上调用它),因此创建包含列表可点击项的变量会更有效;在编辑原始列表时。。。正如我所说,效率是关键,如果我能在没有不必要的“硬编码”列表的情况下做到这一点,那将是非常重要的better@TFC,在这种情况下,是的,多个列表是一个更好的选择。唯一的问题是实现多个接口的实体必须出现在多个列表中。接口名称的约定是它们应该以
I
 abstract class ClickableEntity : Entity, Clickable
 protected List<Entity> entities;

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