我使用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