C#中如何替换业务层更新逻辑的嵌套if else代码
嵌套if-else逻辑优化方案
核心思路
将存在先后依赖关系的国家、省份、区县、城市更新操作,封装为有序的步骤集合,每个步骤绑定对应的更新执行方法、不同返回值对应的提示文案。遍历处理每一条人员记录时,按顺序执行步骤集合中的操作,只要某一步未返回成功状态就终止后续步骤,记录对应提示后直接处理下一条记录。
优化后实现代码
// 定义更新步骤结构,C# 9及以上版本可直接用record,低版本可替换为普通类实现 public record UpdateStep( Func<int, int> UpdateAction, string SuccessTip, string NoMatchConditionTip, string ErrorTip ); public void UpdateRecords() { // 按更新依赖顺序配置步骤列表,后续新增更新层级只需在此添加对应项即可 var updateSteps = new List<UpdateStep> { new UpdateStep( dataAccess.UpdateCountries, "Country Updated Successfully", "Country not Updated Successfully", "Some error occured while updating country..." ), new UpdateStep( UpdateState, "State Updated Successfully", "State not Updated Successfully", "Some error occured while updating state.." ), new UpdateStep( UpdateDistrict, "District Updated Successfully", "District not Updated Successfully", "Some error occured while updating district.." ), new UpdateStep( UpdateCity, "City Updated Successfully", "City Not Updated Successfully", "Some error occured while updating city..." ) }; DataTable dt = dataAccess.GetRecords(); foreach(DataRow dr in dt.Rows) { int personId = Convert.ToInt32(dr["PersonId"].ToString()); foreach(var step in updateSteps) { int updateResult = step.UpdateAction(personId); if(updateResult == 1) { dataAccess.UpdateMessage(personId, step.SuccessTip); // 成功则进入下一个更新步骤 continue; } // 非成功状态,匹配对应提示写入后终止当前人员的后续更新 string tip; if(updateResult == 0) { tip = step.NoMatchConditionTip; } else { tip = step.ErrorTip; } dataAccess.UpdateMessage(personId, tip); break; } } }
注:原代码存在变量名拼写错误(resutlCity)、大小写不一致(PersonId/personId混用)问题,优化代码已统一修正。
方案优势
- 完全消除嵌套if-else结构,逻辑线性展开,可读性和可维护性大幅提升
- 没有使用switch case、三元运算符、存储过程,完全符合要求
- 扩展性极强,后续需要新增更新层级(如乡镇、街道更新),只需在步骤列表中新增对应UpdateStep项即可,无需修改核心执行逻辑
- 所有更新配置和提示文案统一维护,修改时不需要遍历嵌套逻辑定位代码位置
内容的提问来源于stack exchange,提问作者aniket narvankar
相关产品推荐
相关产品推荐

