方法中大量if判断,利用枚举进行优化

在一个方法类中有大量if语句判断,有没有大佬帮忙看看,怎么用枚举的方式进行优化
public LocateDataSourceEventHandler SourceList(string requestId,string reportName)
{
if (reportName.Contains(“WB_SB”)) // 申报单
{
return new WBReport(requestId).WB_SBDataSource;
}
if (reportName.Contains(“WB_ZTY”) || reportName.Contains(“WB_FTY”)) // 货物托运单
{
return new WBReport(requestId).WB_TYDataSource;
}
if (reportName.Contains(“WB_DT”) || reportName.Contains(“WB_BDT”)) // 唛头
{
return new WBReport(requestId).WB_MTDataSource;
}
if (reportName.Contains(“WB_BH_ADD”)) //附页清单
{
return new WBReport(requestId).WB_BH_ADDDataSource;
}
if (reportName.Contains(“WB_HAL”)) //舱单
{
return new WBReport(requestId).WB_HALDataSource;
}
if (reportName.Contains(“WB_BH”)) //保函
{
return new WBReport(requestId).WB_BHDataSource;
}
if (reportName.Contains(“WB_WTS”)) //保函
{
return new WBReport(requestId).WB_WTSDataSource;
}
if (reportName.Contains(“WB_NTWTS”)) //保函
{
return new WBReport(requestId).WB_NTWTSDataSource;
}
if (reportName.Contains(“GHS_DG”)) // GHS
{
return new GHSReport(requestId).GhsDataSource;
}
if (reportName.Contains(“GHS_SH”)) // GHS
{
return new GHSReport(requestId).Ghs_SHDataSource;
}
if (reportName.Contains(“GHS_MT”)) // GHS
{
return new GHSReport(requestId).Ghs_MTDataSource;
}
if (reportName.Contains(“TCP_HWSQ”)) // 通关单
{
return new TCPReport(requestId).TCP_HWSQDataSource;
}
if (reportName.Contains(“TCP_FJ”)) // 通关单
{
return new TCPReport(requestId).TCP_FJDataSource;
}
}

以上是之前未解决的大量if判断,想着找到了方法解决

首先创建两个我们当前需要判断的两个枚举,一个是我们类名的枚举,一个是所有类名中方法的枚举
当然在我们创建类名,和创建类中方法的是否,两者之间的名称是有一定关联的

一下是我项目中所定义的方法规则,大家可以借鉴一下
Report类名取名方法为——***Report
*** 取名必须和报表名前缀相对应——报表名:
*@@@.ralx
***Report中方法取名为——***
@@@DataSource
Report中方法名需和报表名相互对应

//GetReportSourscesEnum 此名称为我所有类中的方法集合的枚举
//GetReportName 此名称为我所有需要判断的类名的集合
Type reportSources = typeof(GetReportSourscesEnum); //创建 枚举Enum Type
            FieldInfo[] sourcesFieldinfo = reportSources.GetFields(); //获取枚举Enum Type中的参数名
            for (int u = 1; u < sourcesFieldinfo.Length; u++)
            {
                if (sourcesFieldinfo[u].Name.Contains(repName))
                {
                    var i = repName.Split('_')[0]; //获取repName 的前缀,根据repName的前缀进行判断需要执行哪个类中的方法
                    Type getreportNames = typeof(GetReportName);
                    FieldInfo[] nameFieldInfo = getreportNames.GetFields();
                    for (int y = 1; y < nameFieldInfo.Length; y++)
                    {
                        if (nameFieldInfo[y].Name.Contains(i + "Report"))
                        {
                            string strClass = "MVC_LocateDataSource." + i + "Report";           // 命名空间+类名
                            string strMethod = repName + "DataSource";        // 方法名

                            type = Type.GetType(strClass);      // 通过类名获取同名类
                            obj = Activator.CreateInstance(type, requestId);       // 创建实例
                            return new _GetReportSources(strMethod, type, obj).Document_LocateDataSource;
                        }
                    }
                }
            }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值