我正在重构遗留代码。有一个很大的if else声明。这是我可以使用的模式吗?我过去曾使用过字典if-else但这有很多(&&)所以不知道如何重构这个。
例如代码是
public void ChangeControlVisibiltiy()
{
if (name != "I")
{
//Do something
}
if ((name != "A") && (name != "B") && (name != "C") && (name != "D") && (name != "F") && (name != "G") && (name != "H") && (name != "I") && (name != "J") && (name != "H") && (name != "I") && (name != "J"))
{
//Do something
}
if ((name != "A") && (name != "B") && (name != "D") && (name != "F") && (name != "G") && (name != "H") && (name != "I") && (name != "J") && (name != "H") && (name != "I") && (name != "J"))
{
//Do something
}
if ((name != "A"))
{
//Do something
}
if ((name != "A") && (name != "K") && (name != "L") )
{
//Do something
}
if ((name != "A") && (name != "K") && (name != "L") && (name != "B") && (name != "D") && (name != "F") && (name != "G") && (name != "H") && (name != "I") && (name != "J") && (name != "H") && (name != "I"))
{
//Do something
}
if ((name != "A") && (name != "L"))
{
//Do something
}
if (name == "M")
{
//Do something
}
else if (name == "C")
{
//Do something
}
else
{
//Do something
}
}
答案 0 :(得分:0)
您可以将此重构为多个switch
分支:
public void ChangeControlVisibiltiy() {
char c;
if(name.Length == 1) {
c = name[0];
} else {
c = '\0';
}
switch(c) {
case 'I':
break;
default:
//1. Do something
break;
}
switch(c) {
case 'A':
case 'B':
case 'C':
case 'D':
case 'F':
case 'G':
case 'H':
case 'I':
case 'J':
break;
default:
//2. Do something
break;
}
switch(c) {
case 'A':
case 'B':
case 'D':
case 'F':
case 'G':
case 'H':
case 'I':
case 'J':
break;
default:
//3. Do something
break;
}
switch(c) {
case 'A':
break;
default:
//4. Do something
break;
}
switch(c) {
case 'A':
case 'K':
case 'L':
break;
default:
//5. Do something
break;
}
switch(c) {
case 'A':
case 'B':
case 'D':
case 'F':
case 'G':
case 'H':
case 'I':
case 'J':
case 'K':
case 'L':
break;
default:
//6. Do something
break;
}
switch(c) {
case 'A':
case 'L':
break;
default:
//7. Do something
break;
}
switch(c) {
case 'M':
//8. Do something
break;
case 'C':
//9. Do something
break;
default:
//10. Do something
break;
}
}
答案 1 :(得分:0)
请注意,在您的代码中,每个条件都有操作。如果你有每个动作的条件它可能看起来更短(但它只是语法糖而你不能利用分支能力来减少动作本身的数量):
controlA.Visibile = someConditionA ? true : false;
controlB.Visibile = someConditionB ? true : false;
controlC.Visibile = someConditionC ? true : false;
在给定示例? true : false
部分可以省略,我提供它是为了清楚,显示您可以这样设置动作参数值。
您仍然必须使用分支(if
/ else
)来避免某些操作发生。
答案 2 :(得分:0)
这看起来有点尴尬,但你可以删除2.和3. if语句。如果您只有一个参数可供检查,您也可以使用switch语句。
然而你应该使用.equals()而不是==,请给我们一个真实的代码示例。一般情况下,如果您使用某种模式一遍又一遍地使用相同的代码,只需将其提取到一个新的方法,例如如果您经常使用像Name.equals("A") || Name.equals("B")
那样的方法,只需制作一个像oredEquals(String name, String... matches)
这样的新方法。