ReSharper抱怨它生成的switch语句 - "无法解析符号......"

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是什么.

那么,为什么会这样呢?

Ant*_*ony 5

问题是你使用的是错误的类型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)