部分切换与句子中的空默认情况

时间:2016-05-18 13:12:19

标签: c# sonarqube sharpdevelop

假设你有enum这样的类型:

public enum Type
{
    A, B, C, D, E, F
}

然后你想根据一些值做一些事情,所以你创建一个切换句子:

switch (type)
{
    case Type.A: // Do something
        break;
    case Type.B: // Do something
        break;
    case Type.C: // Do something
        break;
}

这编译并正常工作,但随后Sonarqube 5.2(使用C#的默认规则)检查代码并抱怨switch没有默认情况(它将其视为主要问题)。所以你将代码更改为:

switch (type)
{
    case Type.A: // Do something
        break;
    case Type.B: // Do something
        break;
    case Type.C: // Do something
        break;
    default: // Do nothing
        break;
}

但是接下来是SharpDevelop抱怨,默认情况并告诉你代码不应该存在,因为它什么都不做。

因此,您最终将代码更改为if句子:

if (type == Type.A) // Do something
else if (type == Type.B) // Do something
else if (type == Type.C) // Do something

使用此代码,SonarQube和SharpDevelop都没有抱怨。好吧,SharpDevelop建议将if转换为switch

那么,哪种方式更好?我应该将默认案例添加到switch并忽略SharpDevelop吗?我应该忽略SonarQube中的问题吗?或者我应该去if句子?还有其他方法可以做得更好吗?

1 个答案:

答案 0 :(得分:5)

嗯,我认为你应该总是有一个默认案例。我在默认情况下抛出一个异常,因为它表明我忘记了编码(例如,通常是一个添加的枚举值),并且明确显示错误的位置。

当然,您所做的取决于默认情况在您的应用程序中的含义。真的是一个“无所事事”是通过代码的好路径的状态吗?这通常表示应该导致重构的缺陷或脆弱代码。对于没有if的{​​{1}}块,您提出的解决办法也是如此。事实上,我很惊讶,sonarqube也没有抱怨这一点。