System.InvalidOperationException
例外がありますが、以下の通りである。そのうちのいくつか、複数の条件に基づいて投げています:キャッチは本体のみ例外タイプの「サブ例外」魔法の文字列をなし
Sequence contains more than one element
Sequence contains no elements
私はしないでくださいすべてのSystem.InvalidOperationException
を処理したい。私はちょうどSequence contains no elements
を処理するだけで、他の人は普通に投げられるようにしたいかもしれませんが、これを行うように見える唯一の方法は、明らかな理由で安全ではない例外メッセージにマジック文字列を使用することです。
メインタイプにロールアップする個々の例外を処理する安全な方法はありますか?
アップデート:私は、このやっているからだと、.SingleOrDefault
を使用し、nullをチェックしていない理由を不思議に思っ誰のために:
DbcColumn = DbcTable?.Columns.Single(c => c.ColumnName.NonCaseEquals(FieldName));
を?
に注意してください。 DbcTableがnullの場合、残りの式は評価されず、DbcColumnはnullになります。 SingleOrDefaultを使用すると、DbcColumnはnullになりますが、DbcTableがnullだったか、SingleOrDefaultが一致しなかったかどうかわかりません。これを行うために持っていることから私を続けて:
if (DbcTable != null)
{
DbcColumn = DbcTable.Columns.SingleOrDefault(c => c.ColumnName.NonCaseEquals(FieldName));
if (DbcColumn == null)
{
throw new Exception($"{nameof(DbcColumn)} {FieldName} not found in {DbcTable.DatabaseName}.{DbcTable.TableName}");
}
}
だから私は、私はできません何をしたいかと思います。
より良い方法は、彼らが最初の場所でスローさせることではありません。たとえば、「シーケンスに要素がありません」ということを避けるには、「First」の代わりに「FirstOrDefault」を使用し、nullをチェックします。他の場合も同様です。 – Joe
@ジョー私はなぜこれをやりたいの私の質問への更新を参照してください。 – oscilatingcretin
例外を区別できるようにするには、より優れた例外戦略が必要でした。次に、より具体的なものではなくExceptionを投げます。あなたが説くことを実践してください;) – jgauffin