首页 > 解决方案 > 很多 if 和 else 条件重复代码

问题描述

我有一个场景,我根据选中的复选框进行过滤,现在我只有 2 个复选框,我需要将所有场景包含在 if 中,否则条件如下:

//List Example:
 var projectTechnicians = (from DataRow dr in dtEmployeGuid.Rows
                                      where dr["Title"].ToString().Contains("Project Technician")
                                      select new
                                      {
                                          EmpGuid = (Guid)dr["EmpGuid"]
                                      }).ToList();




if (!chkProjectTechs.Checked && !chkTeamLeader.Checked)
{
    foreach (DataRowView list in lstTech.SelectedItems)
    {
        var selectedEmpGuid = (Guid)list[0];
        EmpGuid.Add(selectedEmpGuid);
    }
    parameters = ToDataTable(EmpGuid);
}
else if (!chkTeamLeader.Checked && chkProjectTechs.Checked)
{
    foreach (var technician in projectTechnicians)
    {
        EmpGuid.Add(technician.EmpGuid);
    }
    parameters = ToDataTable(EmpGuid);
}
else if (!chkProjectTechs.Checked && chkTeamLeader.Checked)
{
    foreach (var teamLeader in teamLeaders)
    {
        EmpGuid.Add(teamLeader.EmpGuid);
    }
    parameters = ToDataTable(EmpGuid);
}
else if (chkProjectTechs.Checked && chkTeamLeader.Checked)
{
    foreach (var technician in projectTechnicians)
    {
        EmpGuid.Add(technician.EmpGuid);
    }
    parameters = ToDataTable(EmpGuid);

    foreach (var teamLeader in teamLeaders)
    {
        EmpGuid.Add(teamLeader.EmpGuid);
    }
    parameters = ToDataTable(EmpGuid);
}

但是我需要添加更多复选框,但是对于每个复选框,我将添加到我的表单中,我需要将它添加到每个条件中,并且在一天的最后,我会得到一个很长的代码。还有另一种方法可以做到这一点吗?

标签: c#

解决方案


你最后一个else if条件有问题。parameters被团队负责人 empGuids 覆盖

foreach (var technician in projectTechnicians)
    {
        EmpGuid.Add(technician.EmpGuid);
    }
    parameters = ToDataTable(EmpGuid);

    foreach (var teamLeader in teamLeaders)
    {
        EmpGuid.Add(teamLeader.EmpGuid);
    }
    parameters = ToDataTable(EmpGuid); // Overwriting projectTechnicians added above.

您可以通过仅使用 if 条件来简化代码,请查看我在代码中的注释。

// add EmpGuids from lstTech if no check box is selected.
// you need to add all checkboxes not selected in the condition
if (!chkProjectTechs.Checked && !chkTeamLeader.Checked)
{
    foreach (DataRowView list in lstTech.SelectedItems)
    {
        var selectedEmpGuid = (Guid)list[0];
        EmpGuid.Add(selectedEmpGuid);
    }
}

// if projectTechnicians is checked, then add projectTechnicians EmpGuids to parameters
if (chkProjectTechs.Checked)
{
    foreach (var technician in projectTechnicians)
    {
        EmpGuid.Add(technician.EmpGuid);
    }
}

// add team leader Empguids if checked.
if (chkTeamLeader.Checked)
{
    foreach (var teamLeader in teamLeaders)
    {
        EmpGuid.Add(teamLeader.EmpGuid);
    }
}

// Add new checkbox conditions here
//

// perform your next operation on parameters here. 
// At this point you will have either lstTech employees or employees based on checkbox selection in EmpGuid list.
parameters = ToDataTable(EmpGuid);

编辑 如果您使用的是 LINQ,那么您可以使用下面的 LINQ 查询来添加 EmpGuids 而不是 using foreach,例如。

EmpGuid.AddRange(teamLeader.Select(x=>x.EmpGuid));

推荐阅读