首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么时候应该尝试删除开关语句?

什么时候应该尝试删除开关语句?
EN

Stack Overflow用户
提问于 2009-07-01 23:45:53
回答 13查看 3.4K关注 0票数 8

我在我正在做的代码库中遇到了一个开关语句,我正在试图找出如何用自开关语句被认为是代码气味。以来更好的东西来替换它。但是,在阅读了关于替换 交换机 语句的堆叠溢出的文章之后,我似乎想不出一种有效的方法来替换这个特定的开关语句。

这让我想知道这个特定的开关语句是否正常,以及是否有特殊的情况认为开关语句是合适的。

在我的例子中,我正在挣扎的代码(自然有点模糊)如下所示:

代码语言:javascript
运行
复制
private MyType DoSomething(IDataRecord reader)
{
    var p = new MyType
                {
                   Id = (int)reader[idIndex],
                   Name = (string)reader[nameIndex]
                }

    switch ((string) reader[discountTypeIndex])
    {
        case "A":
            p.DiscountType = DiscountType.Discountable;
            break;
        case "B":
            p.DiscountType = DiscountType.Loss;
            break;
        case "O":
            p.DiscountType = DiscountType.Other;
            break;
    }

    return p;
}

有人能提出一个消除这个开关的方法吗?或者这是一个适当的开关使用吗?如果是的话,开关语句还有其他合适的用途吗?我真的很想知道它们在哪里合适,这样我就不会浪费太多的时间来消除我遇到的每一个开关语句,因为它们在某些情况下被认为是一种气味。

更新:在的建议下,我对这个逻辑的复制做了一些搜索,发现有人在另一个类中创建了逻辑,这实际上使整个迈克尔语句变得多余。因此,在这个特定代码的上下文中,开关语句是不必要的。然而,我的问题更多的是关于代码中的switch语句是否合适,以及我们是否应该总是在找到它们时尝试替换它们,所以在这种情况下,我倾向于接受这样的答案,即这个switch语句是合适的。

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2009-07-01 23:49:17

这是对开关状态的适当使用,因为它使选择具有可读性,并且易于添加或减法。

看这个链接。

票数 16
EN

Stack Overflow用户

发布于 2009-07-01 23:52:27

Switch语句(特别是长语句)被认为是不好的,不是因为它们是switch语句,而是因为它们的存在意味着需要重构。

开关语句的问题是,它们会在代码中产生分支(就像if语句一样)。每个分支必须单独进行测试,每个分支中的每个分支和.好吧,你明白了。

尽管如此,以下文章对于使用switch语句有一些良好的实践:

http://elegantcode.com/2009/01/10/refactoring-a-switch-statement/

就您的代码而言,上面链接中的文章建议,如果要执行从一种枚举到另一种枚举的这种类型的转换,您应该将您的开关放在自己的方法中,并使用返回语句而不是中断语句。我以前也这样做过,代码看起来要干净得多:

代码语言:javascript
运行
复制
private DiscountType GetDiscountType(string discount)
{
    switch (discount)
    {
        case "A": return DiscountType.Discountable;
        case "B": return DiscountType.Loss;
        case "O": return DiscountType.Other;
    }
}
票数 14
EN

Stack Overflow用户

发布于 2009-07-01 23:52:41

我认为为了改变代码而改变代码并不是最好的时间。更改代码以使其更易读、更快、更有效率等是有意义的。不要仅仅因为有人说你在做“臭事”就改变它。

-Rick

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

https://stackoverflow.com/questions/1071856

复制
相关文章

相似问题

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