首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >部分开关与if语句中的空缺省大小写

部分开关与if语句中的空缺省大小写
EN

Stack Overflow用户
提问于 2016-05-18 13:12:18
回答 1查看 2K关注 0票数 1

假设您有这样一个enum类型:

代码语言:javascript
复制
public enum Type
{
    A, B, C, D, E, F
}

然后,您想要根据其中的一些值执行一些操作,因此您创建了一个切换语句:

代码语言:javascript
复制
switch (type)
{
    case Type.A: // Do something
        break;
    case Type.B: // Do something
        break;
    case Type.C: // Do something
        break;
}

它编译并工作得很好,但是接着Sonarqube5.2(使用C#的默认规则)检查代码,并抱怨switch没有默认的大小写(它将其限定为一个主要问题)。因此,您可以将代码更改为:

代码语言:javascript
复制
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语句:

代码语言:javascript
复制
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语句呢?还有其他更好的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-18 13:17:11

嗯,在我看来,你应该总是有一个默认的案例。在默认情况下,我抛出一个异常,因为它表明我忘记编写一些代码(例如,通常是一个附加的枚举值),并清楚地表明了bug在哪里。

当然,您要做的事情取决于应用程序中默认情况的含义。是否真的有一种“什么都不做”是通过代码的好路径的状态?这通常表明一个缺陷或脆弱的代码,应该导致重构。同样的情况也适用于没有ifelse块,这是您作为一项工作提出的。事实上,我很惊讶声纳没有抱怨过。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37300694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档