使用のポイントは何ですかFirst
LINQの中の演算子FirstOrDefault
代わりに演算子?
var q = results.First(); // Error if empty
特定の質問に直接回答するにはFirst
いつでも使えるならFirstOrDefault
)、使用できない場合がありますFirstOrDefault
情報が失われるからです。 「デフォルト値」は、おそらくソースリスト内の有効な要素タイプです。列挙型の最初の要素がnull / defaultであることと、リストに要素がないこととを区別することはできません。First
または最初にあるかどうか確認するAny
要素。二重列挙が必要です。
これは、次のような値型列挙型に特に当てはまります。int[]
。default(int)
です0
これも配列の有効な値です。
一般に、2つの方法は異なる論理フローを表します。First
要素を持たないことが「例外的」(エラー)である場合に使用されます。その場合は、アプリケーションで帯域外を処理します。このシナリオでは、少なくとも1つの要素があると期待しています。FirstOrDefault
空のセットではnullを返します。つまり、戻り値を使って追加の処理を行う必要があります。これはParse
vsTryParse
メソッドオンint
/double
/等。実際、あなたの質問はある意味ではなぜ例外を使用するのかというより一般的な質問につながります。
からFirst
例外をスローすると、例外が提供するすべてのコード再利用の機会に役立ちます。たとえば、次のようにします。
try
{
x = arr1.First();
y = arr2.First();
z = arr3.First();
}
catch
{
throw new ArgumentException();
}
明示的に例外の発生を強制するnull
チェック。
それはと同じ議論ですInt32.Parse
対Int32.TryParse
。前者は失敗した場合に例外をスローし、後者はfalseを返し、プログラムはスムーズに続行します...
First
(Error-if-emptyがある場合)はより理想的ではないと考えられていますFirstOrDefault
。 - user166390