24

いくつかIEnumberableのアイテムのコレクションがあります。.Single()コレクション内の特定のオブジェクトを見つけるために使用します。

Single()特定のアイテムが1つしかないため、使用することにしました。ただし、存在しない場合は、作成してコレクションに追加する必要があります。

私の問題はSingle()、述語に一致するアイテムがない場合、または複数のアイテムがある場合に同じエラーをスローすることです。私のアイデアは、Single()呼び出しをtry内に入れて例外をキャッチし、アイテムを追加してから続行することでした。ただし、どちらのシナリオでもがスローInvalidOperationExceptionされるため、アイテムがないか複数のアイテムが原因であるかをどのように判断できますか?

使用できることはわかっていますFirst()が、(余分な作業を行わずに)1つだけにする必要があるという考えを強制するものではありません。

電話Count()の前に使うこともできますが、それはSingle()Single()

4

3 に答える 3

39

あなたが欲しいのはSingleOrDefault()

「またはデフォルト」は、実際にはnull(参照型の場合)または非参照型のデフォルトが返されることを意味します。その場所をとるには、オブジェクトを新しくする必要があります。

于 2012-11-21T17:10:09.553 に答える
5

論理的な決定を行うために例外を使用するとリソースが高価になるため、このシナリオでtry/catchを使用することはお勧めしません。

SingleOrDefault()を使用して、結果がnullかどうかを確認することをお勧めします。もしそれが。あなたの創造をしてください。

于 2012-11-21T17:10:49.957 に答える
1

セットに複数のアイテムがある場合、SingleOrDefaultは例外をスローします。事前に手動でサイズを確認する必要があります。

var singleItem = list.Count() == 1 ? list.Single() : null;

たぶん、あなた自身の拡張機能を作るのが最善かもしれません。

于 2021-11-09T12:43:08.253 に答える