如果我们具有相同的条件但标准不同,则切换case语句可以替换嵌套的if语句.但是,如果那些嵌套的if语句都具有不同且独特的条件,那么什么是好的方法呢?我是否有任何替代选项来替换彼此嵌套的十几个if else语句?
@H_404_12@@R_404_323@
示例代码:
>注意:我知道这是非常难以理解的 – 这就是重点.
>注意:所有条件都是唯一的.
…
- 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);