我想检查元素列表,看它是否至少包含特定派生类型的两个元素。目前我的实现如下:
public override bool IsEnabledForTechnology(List<TechnologyBase> enabledTechnologies)
{
return enabledTechnologies.Any(t => t.GetType() == typeof(TechnologyA)) && enabledTechnologies.Any(t => t.GetType() == typeof(TechnologyB));
}
实现这一目标最有效的陈述是什么?
答案 0 :(得分:4)
使用OfType
按类型过滤列表:
public override bool IsEnabledForTechnology(List<TechnologyBase> enabledTechnologies)
{
return enabledTechnologies.OfType<TechnologyA>.Any() &&
enabledTechnologies.OfType<TechnologyB>.Any();
}
答案 1 :(得分:0)
return enabledTechnologies.Any( t => { return (t.GetType() == typeof(TechnologyA)) && (t.GetType() == typeof(TechnologyB));} )
这将删除至少一个foreach循环。也可以用lambda中的临时变量替换t.GetType()
,但优化器应该为你做。