如果我们具有相同的条件但标准不同,则切换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 } } } } } }
解决方法
当我看到代码时,我不得不检查这是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);