1

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

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

实现这一目标的最有效声明是什么?

4

2 回答 2

4

用于OfType按类型过滤列表:

public override bool IsEnabledForTechnology(List<TechnologyBase> enabledTechnologies)
{
    return enabledTechnologies.OfType<TechnologyA>.Any() && 
           enabledTechnologies.OfType<TechnologyB>.Any();
}
于 2012-05-29T17:54:33.557 回答
0
return enabledTechnologies.Any( t => { return (t.GetType() == typeof(TechnologyA)) && (t.GetType() == typeof(TechnologyB));} )

这将删除至少一个 foreach 循环。也可以用t.GetType()lambda 中的临时变量替换,但优化器应该为你做。

于 2012-05-29T17:55:12.037 回答