检查列表是否包含两个不同派生类型的元素

时间:2012-05-29 17:52:22

标签: c# linq

我想检查元素列表,看它是否至少包含特定派生类型的两个元素。目前我的实现如下:

    public override bool IsEnabledForTechnology(List<TechnologyBase> enabledTechnologies)
    {
        return enabledTechnologies.Any(t => t.GetType() == typeof(TechnologyA)) && enabledTechnologies.Any(t => t.GetType() == typeof(TechnologyB));
    }

实现这一目标最有效的陈述是什么?

2 个答案:

答案 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(),但优化器应该为你做。