假设您有这样一个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;
}它编译并工作得很好,但是接着Sonarqube5.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语句呢?还有其他更好的方法吗?
发布于 2016-05-18 13:17:11
嗯,在我看来,你应该总是有一个默认的案例。在默认情况下,我抛出一个异常,因为它表明我忘记编写一些代码(例如,通常是一个附加的枚举值),并清楚地表明了bug在哪里。
当然,您要做的事情取决于应用程序中默认情况的含义。是否真的有一种“什么都不做”是通过代码的好路径的状态?这通常表明一个缺陷或脆弱的代码,应该导致重构。同样的情况也适用于没有if的else块,这是您作为一项工作提出的。事实上,我很惊讶声纳没有抱怨过。
https://stackoverflow.com/questions/37300694
复制相似问题