mic*_*ael 2 c# resharper enums switch-statement
我正在使用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");
}
}
Run Code Online (Sandbox Code Playgroud)
似乎如果我将枚举值作为参数传递,ReSharper不会抱怨它生成的代码.它识别出value在异常消息中适当使用.
但是,如果我在方法中以某种其他方式获取值作为局部变量,ReSharper似乎会抱怨它生成的代码,声称"无法解析符号'值'".这是有道理的,因为它value是一个局部变量,因此捕获异常消息的消费者不知道究竟value是什么.
那么,为什么会这样呢?
问题是你使用的是错误的类型Exception.在第二个例子value中不是一个参数,所以抛出一个语义是错误的ArgumentOutOfRangeException.我已经创建了一个Exception在这种情况下使用的自定义,欢迎您将它用于您的目的:
public class UnexpectedEnumException : Exception
{
public UnexpectedEnumException(Type enumType, object unexpectedValue)
: base(string.Concat("Unexpected ", enumType.Name, ": ", unexpectedValue))
{
}
public static UnexpectedEnumException Create<TEnum>(TEnum unexpectedValue) where TEnum : struct, IConvertible, IFormattable, IComparable
{
return new UnexpectedEnumException(typeof (TEnum), unexpectedValue);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
936 次 |
| 最近记录: |