c# - 很多 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);
}
但是我需要添加更多复选框,但是对于每个复选框,我将添加到我的表单中,我需要将它添加到每个条件中,并且在一天的最后,我会得到一个很长的代码。还有另一种方法可以做到这一点吗?
解决方案
你最后一个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));
推荐阅读
- vue.js - 如何在 vuex 中使用 nuxt-i18n 包中的 localeRoute
- linux - 捕获输入设备会禁用两指右键单击功能
- github - Circleci:如何根据 git release 进行部署(发布一个标签)
- javascript - 当文件夹具有特定名称时,php预加载文件?什么?
- file - 如何使用反斜杠符号和 2 个点 ('\..') 获取文件的路径
- javascript - 如何使用 ANTLR V4 提取未定义的全局变量
- c# - 向 tblPurchase 表插入新记录时更新 tblProductStock 表
- javascript - 如何使用 Jersey 从服务器发送大文件?
- c# - System.Net.Sockets.SocketException (0x80004005) 从 Windows 服务下载文件时
- android - Android AutoCompleteTextView 在输入建议列表时重叠