【发布时间】:2014-09-04 15:45:57
【问题描述】:
我在使用 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 非常奇怪且违反直觉。
-
自定义异常通常没有正确实现。例如,它们通常没有正确序列化或包含不可序列化类型的字段,当您的异常尝试跨越 AppDomain 边界时会导致问题。如果您确实实现了自己的异常,我建议您遵循 MSDN 上的所有详细信息。
标签: c# enums switch-statement resharper