1

要素のリストをチェックして、特定の派生型の要素が少なくとも 2 つ含まれているかどうかを確認したいと考えています。現在、私の実装は次のようになっています。

    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));} )

これにより、少なくとも 1 つの foreach サイクルが削除されます。ラムダの一時変数に置き換えることもできt.GetType()ますが、オプティマイザーが代わりに行う必要があります。

于 2012-05-29T17:55:12.037 に答える