2016-04-27 7 views
0

MyEnumを指定すると、プロパティEnumValueIList<MyClass> listを持つクラスは、ループを記述することなく、複数のリスト要素に列挙値が見つからないと判断する賢明なLINQ方法ですか?列挙型の各値が、LINQを使用して最大でも1つの要素の1つの要素にあることを確認しますか?

私は知っているが、それは現実世界のコードであり、私が書いているコードであり、恐ろしいことではないかと思ったのだろうか?例えば

foreach (var e in Enum.GetValues(typeof(MyEnum))) 
       Assert.IsTrue(list.Count(x => x.EnumValue == e) <= 1); 
+5

「ループを使用しない」と言うとき - 「コードにループを使用しない」という意味ですか?ループがどこかで実行されなければ、それはできません。単にあなたがそれを説明するのではなく、[mcve]を使ってそれを実演したら、その質問を理解する方が簡単であることに注意してください。 –

+0

私はこの部分を理解できません: "enum値は複数のリスト要素で見つかりません" –

+0

@JonSkeet _writing_を使わないとループがおそらく暗示されますが、明確な例を追加しました –

答えて

8

あなたはlistオブジェクト内のMyEnum値は高々一度表示されたかどうかを確認したい場合は、グループEnumValueプロパティ値によってlist内の項目は、これらのグループにある項目数を確認することができます:

bool result = list.GroupBy(c => c.EnumValue).All(g => g.Count() == 1); 
+1

また、1と等しいかどうかを確認できます。それは決して1未満ではありません。 –

+0

@ YacoubMassad:絶対に真です。 –

関連する問題