更有效地删除使用IF语句C#

时间:2015-03-06 13:15:29

标签: c# design-patterns refactoring

我想知道是否有更好的方法来使用if语句而不仅仅是长行

if(){
    //code
}else if(){
    //code
} else{
    //code
}

我在网站上做了一些研究,我发现了这个:

  

如果您只有2个值,我强烈建议您使用您发布的代码,因为它可能是最易读,优雅和快速的代码(恕我直言)。

     

但如果你有更多这样的案例而且更复杂,你可以   想使用switch语句:

switch (el.type)
{
    case ElementType.Type1:
    case ElementType.Type2:
    case ElementType.Type3:
        //code here
        break;
    case ElementType.Type4:
    case ElementType.Type5:
        //code here
        break;
    case ElementType.Type6:
        //code here
        break;
}
that translated in if statements would be:

if (el.type == ElementType.Type1 ||
    el.type == ElementType.Type2 ||
    el.type == ElementType.Type3 )
{
    // code here
}else if(el.type == ElementType.Type4 ||
         el.type == ElementType.Type5)
{
    // code here
}else if(el.type == ElementType.Type6)
{
    // code here
}

它们完全等同于我,但是开关似乎更具可读性/更清晰,并且您需要输入更少(即它" s"更短"在代码长度方面): )

虽然我不太明白它告诉我的是什么,但是它是否说switch语句对于long if语句更好用?

为了解决我的问题的一些背景,我有一个带有一些单选按钮的Windows窗体应用程序 - 如果你愿意的话,我会问一个问题 - 我想知道是否有更有效的方法可以减少重复的不必要的代码行并用短的替换它们执行相同工作的代码。

4 个答案:

答案 0 :(得分:0)

切换语句以及许多if-else语句通常是臭设计的标志。 考虑重构为more object-oriented design

If-else的可读性不比switch-case高,反之亦然。

答案 1 :(得分:0)

目标应该是更易读/更清晰的代码,这并不总是意味着最短的陈述。

如果你有非常复杂的逻辑,有很多嵌套的if / else分支,试着把它拆分成更小,更简单的例程。

答案 2 :(得分:0)

您可以申请CoR patternHere您将完成.NET实现之一。 当您将其与IoC container结合使用时,您可以实现非常灵活的架构......

答案 3 :(得分:0)

switch语句不仅更易于阅读,而且编译器更容易优化,因为它们明确指定了一个触发所有代码的值。编译器可以使用散列或跳转表而不是一系列比较来轻松优化它,使其更快(当它可以这样做时)。从技术上讲,它可以检测到if语句是相同的,但可能会或可能不够复杂。因此,如果您有256个单独的情况触发byte的值,则可以将开关编译为代码偏移的硬编码数组(数组中的每个条目都是处理该情况的代码的偏移量),并且根本没有进行比较,因为它只能使用字节值作为硬编码数组的索引并跳转到正确的代码。这比<(> 256)比较 更快

使用string值的交换机也是专门处理的,使用哈希码可以获得更好的性能。您可以明确地执行类似的操作,但是您的代码可读性会低得多。