還有的System.InvalidOperationException
例外,但它是基於多個條件拋出,有幾個,其中如下:趕上主要異常類型的唯一的「子例外」不用魔法串
Sequence contains more than one element
Sequence contains no elements
我不想要處理每個System.InvalidOperationException
。我可能只想處理Sequence contains no elements
,同時允許其他人正常拋出,但似乎這樣做的唯一方法是使用一個魔術字符串來匹配異常消息,由於顯而易見的原因,這是不安全的。
有沒有安全的方式來處理捲起主要類型個別例外?
更新:大家很奇怪,爲什麼我不使用.SingleOrDefault
和檢查空,那是因爲我這樣做:
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}");
}
}
所以我想我想做的事是不可能的。
一種更好的方式來處理你所描述的錯誤,是不是讓他們在第一時間拋出。例如,爲了避免「Sequence contains no elements」,你可以使用'FirstOrDefault'而不是'First'並檢查null。對於其他情況也是如此。 – Joe
@Joe更新我的問題,爲什麼我想這樣做。 – oscilatingcretin
所以你想要一個更好的異常策略來區分異常,然後繼續並拋出'Exception'而不是更具體的異常?練習你說的話;) – jgauffin