我使用ReSharper的,和我遇到了兩種情景生成switch語句時:ReSharper的抱怨它產生的switch語句 - 「無法解析符號......」
public void DoWork(MyEnum value)
{
switch(value)
{
// ...
default:
throw new ArgumentOutOfRangeException("value");
}
}
public void DoWork()
{
var value = GetEnumValue();
switch(value)
{
// ...
default:
// Cannot resolve symbol 'value'
throw new ArgumentOutOfRangeException("value");
}
}
似乎如果我將枚舉值作爲參數傳入,ReSharper不會抱怨它生成的代碼。它認識到value
適用於例外消息。但是,如果我在方法中以某種其他方式獲取值作爲局部變量,ReSharper似乎會抱怨它生成的代碼,聲稱「無法解析符號」值「」。這種說法是有道理的,因爲value
是一個局部變量,所以捕獲異常消息的用戶不知道什麼是value
。
那麼,爲什麼會發生這種情況呢?
爲什麼不使用自定義異常?如果你沒有任何爭論,那麼拋出一個ArgumentOutOfRange非常奇怪,違反直覺。 – 2014-09-04 15:54:11
自定義異常通常沒有正確實現。例如,它們通常不能正確序列化或包含不可序列化類型的字段,當異常嘗試跨越AppDomain邊界時會導致問題。如果您*執行*自己的例外,我會建議遵循MSDN上的所有細節。 – vcsjones 2014-09-05 11:14:32