if多条件语句如何简化,减少内存消耗,Creatchartx();为获取图像的方法

if (flag == true)//如果按钮被点击
{
if (comboBox1.Text == "CHR1" && comboBox2.Text == "1" && comboBox3.Text == "1002")
{

//return Creatchart1();
Creatchart5();

}
else if (comboBox1.Text == "CHR2" && comboBox2.Text == "1" && comboBox3.Text == "1002")
{
Creatchart6();
}
else if (comboBox1.Text == "CHR1" && comboBox2.Text == "2" && comboBox3.Text == "1002")
{
Creatchart7();
}
else if (comboBox1.Text == "CHR2" && comboBox2.Text == "2" && comboBox3.Text == "1002")
{
Creatchart8();
}
else if (comboBox1.Text == "CHR1" && comboBox2.Text == "1" && comboBox3.Text == "1009")
{

//return Creatchart1();
Creatchart1();

}
else if (comboBox1.Text == "CHR2" && comboBox2.Text == "1" && comboBox3.Text == "1009")
{
Creatchart2();
}
else if (comboBox1.Text == "CHR1" && comboBox2.Text == "2" && comboBox3.Text == "1009")
{
Creatchart3();
}
else if (comboBox1.Text == "CHR2" && comboBox2.Text == "2" && comboBox3.Text == "1009")
{
Creatchart4();
}
}
} 

用嵌套的switch case 会不会更好点

如果是无规律的判断基本没办法优化,但是你这个是有规律的判断,比如你这里,无论是,comboBox1.Text、comboBox2.Text、comboBox3.Text都只有2种变化,所以一共2^3种情况,并且都要用到。

所以直接


int cbt1 = comboBox1.Text == "CHR1" ? 0 : 1;
int cbt2 = comboBox2.Text == "1" ? 0 : 2;
int cbt3 = comboBox3.Text == "1009" ? 0 : 4;
int methodId = 1 + cbt1 + cbt2 +cbt3;

然后无论是反射或者switch就随便你了

如果你的方法比较少,而且后续也不太需要改,那么建议switch case搞定

switch(methodId){
    case 1  :
       Creatchart1();
       break; 
    case 2  :
       Creatchart2();
       break; 
……
}

反射比较耗资源,单从性能上考虑还不如if else但是反射有设计上的优势,也就是之后可以用较少的工作量完成拓展,比如你之后又多了3个comboBox,排列组合一下有64中可能,if else或者swich case需要每个方法手动调用一次,而反射实现这块就不太需要改

//c#代码好久没写了大致意思就是这样
Type type = this.getType();
MethodInfo method = type.GetMethod("Creatchart" + methodId.toString(), new Type[] { }); 
method.Invoke(this, null);  

有办法:
在全局定义一个由comboBox1.Text == "CHR2" && comboBox2.Text == "2" && comboBox3.Text == "1009"值的数据字典,如:
var funcDict=new Dictionary< string,action>(){
{"CHR1_1_1002", this.Creatchart1},
{"CHR2_1_1009", this.Creatchart2}
...依次类推
}
然后逻辑中改为string key= string.Format("{0}
{1}_{2}",comboBox1.Text,comboBox2.Text,comboBox3.Text) 去数据字典里面找对应的Action
找到后,直接将action实例.Invoke()
此方法不用switch-case,也没用反射,而是采取了预定义字典的方式,兼顾代码书写和性能;