替换If Else唯一条件嵌套语句

EP2*_*012 6 .net c# if-statement

如果我们具有相同的条件但标准不同,则切换case语句可以替换嵌套的if语句.但是,如果那些嵌套的if语句都具有不同且独特的条件,那么什么是好的方法呢?我是否有任何替代选项来替换彼此嵌套的十几个if else语句?

示例代码:

  • 注意:我知道这是非常难以理解的 - 这就是重点.
  • 注意:所有条件都是唯一的.

...

if (condition) {
    // do A
} else {                       
    if (condition) {
        // do B
    if (condition) {
        if (condition) {
            if (condition) {
                // do C
                if (condition) {
                    // do D
                    if (condition) {
                        // do E
                    } else {                                                   
                        if (condition) {
                            // do F
                        }
                    }
                }
            }

            if (condition) {
                // do G
                if (condition) {
                    // do H
                    if (condition) {
                        // do I
                    } else {
                        // do J
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Jer*_*son 1

当我看到代码时,我必须检查这是 Stackoverflow 而不是 DailyWTF!

解决方案是改变架构并使用接口和多态性来绕过所有条件。然而,这可能是一项艰巨的工作,并且超出了可接受的答案的范围,所以我会推荐另一种方法,您可以使用具有独特条件的 Switch 语句:

[Flags]
public enum FilterFlagEnum
{
    None = 0,
    Condition1 = 1,
    Condition2 = 2,
    Condition3 = 4,
    Condition4 = 8, 
    Condition5 = 16,
    Condition6 = 32,
    Condition7 = 64 
}; 


public void foo(FilterFlagEnum filterFlags = 0)
{
        if ((filterFlags & FilterFlagEnum.Condition1) == FilterFlagEnum.Condition1)
        {
            //do this
        }
        if ((filterFlags & FilterFlagEnum.Condition2) == FilterFlagEnum.Condition2)
        {
            //do this
        }
}


foo(FilterFlagEnum.Condition1 | FilterFlagEnum.Condition2);
Run Code Online (Sandbox Code Playgroud)