原代码如图:
看起来是大量重复代码,虽然看起来优雅,但是如果设置的值高达上百个那不是要写上百个嘛?此处来自上级领导审阅我的代码后给出的想法,于是乎我对代码进行了二次重构
switch (CurrentSysParameter.SysParameter_ID)
{
case SysParamIDs.RLUA_L3:
PopupControlNames.RLUA_L3 = PCSession.dictWorkDataSet[CurrentExtNo].GetSysParamValue<double>(SysParamIDs.RLUA_L3);
break;
case SysParamIDs.RLUB_L3:
PopupControlNames.RLUB_L3 = PCSession.dictWorkDataSet[CurrentExtNo].GetSysParamValue<double>(SysParamIDs.RLUB_L3);
break;
case SysParamIDs.RLUC_L3:
PopupControlNames.RLUC_L3 = PCSession.dictWorkDataSet[CurrentExtNo].GetSysParamValue<double>(SysParamIDs.RLUC_L3);
break;
case SysParamIDs.RLUD_L3:
PopupControlNames.RLUD_L3 = PCSession.dictWorkDataSet[CurrentExtNo].GetSysParamValue<double>(SysParamIDs.RLUD_L3);
break;
case SysParamIDs.CONA_L3:
PopupControlNames.CONA_L3 = PCSession.dictWorkDataSet[CurrentExtNo].GetSysParamValue<double>(SysParamIDs.CONA_L3);
break;
case SysParamIDs.CONB_L3:
PopupControlNames.CONB_L3 = PCSession.dictWorkDataSet[CurrentExtNo].GetSysParamValue<double>(SysParamIDs.CONB_L3);
break;
case SysParamIDs.CONC_L3:
PopupControlNames.CONC_L3 = PCSession.dictWorkDataSet[CurrentExtNo].GetSysParamValue<double>(SysParamIDs.CONC_L3);
break;
case SysParamIDs.COND_L3:
PopupControlNames.COND_L3 = PCSession.dictWorkDataSet[CurrentExtNo].GetSysParamValue<double>(SysParamIDs.COND_L3);
break;
}
改造后的代码:
如图:
// 获取静态类的类型对象
Type staticClassType = typeof(PopupControlNames);
// 获取属性的 FieldInfo 对象
FieldInfo field = staticClassType.GetField($"{CurrentSysParameter.Name}", BindingFlags.Public | BindingFlags.Static);
object value = PCSession.dictWorkDataSet[CurrentExtNo].GetType().GetMethod("GetSysParamValue").MakeGenericMethod(typeof(double)).Invoke(PCSession.dictWorkDataSet[CurrentExtNo], new object[] { CurrentSysParameter.SysParameter_ID }); //获取值
field.SetValue(null, value); //设置值
这里因为属性的值,刚好和选择的值是一致的,所以可以这样做。如果不一样的话,需要建立字典进行映射。具体这方面的方法可以查看C#映射使用之AutoMapper与映射的关系
相关推荐: C#利用反射让繁琐复杂的switch,case代码变得简洁
原代码如图:看起来是大量重复代码,虽然看起来优雅,但是如果设置的值高达上百个那不是要写上百个嘛?此处来自上级领导审阅我的代码后给出的想法,于是乎我对代码进行了二次重构switch (CurrentSysParameter.SysParameter_ID) { …
© 版权声明
THE END
暂无评论内容