更新列表而不破坏代码

时间:2017-09-26 21:06:54

标签: c# list

然而,我遇到了另一个问题。由于它更新了我的列表,我需要弄清楚如何在不破坏我的代码的情况下修改列表。建议?

我要做的是更新我的列表,以便在操作无法应用于操作并删除不符合条件的操作时发送错误消息。所以基本上如果它不是代码40或45然后从列表中删除它们并在代码是40或45时发送错误消息。我不知道我是否可以进一步澄清我的问题。我还是编程新手。

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        ValidateActionSelected();

        ValidateCleared(actionsChecked);

        if (String.Equals(ddlActionsAndDocuments.SelectedItem.Text.ToString(), "XXX YYY") || String.Equals(ddlActionsAndDocuments.SelectedItem.Text.ToString(), "XXX ZZZ"))
            {
                reqEffectiveDate.ErrorMessage = "";
            }

            if (ddlActionsAndDocuments.SelectedValue == ActionTypes.XXXYYY ||
                ddlActionsAndDocuments.SelectedValue == ActionTypes.XXXYYYDenial ||
                ddlActionsAndDocuments.SelectedValue == ActionTypes.XXXzzz)
            {
                ValidateXXXYYY(actionsChecked, ddlActionsAndDocuments.Text);
            }

            if (ddlActionsAndDocuments.SelectedValue == InsuranceActionTypes.WWW ||
                ddlActionsAndDocuments.SelectedValue == InsuranceActionTypes.YYYZZZ ||
                ddlActionsAndDocuments.SelectedValue == InsuranceActionTypes.YYYWWW ||
                ddlActionsAndDocuments.SelectedValue == InsuranceActionTypes.YYYWaived)
            {
                ValidateCertificate(actionsChecked, ddlActionsAndDocuments.Text);
            }
        }
    }

    private void ValidateCleared(List<xxCaseEntity> actionsChecked)
    {
        foreach (xxCaseEntity ACTIONyy in actionsChecked)
        {
            if (ACTIONyy.XXStatusCode == 40 || ACTIONyy.XXStatusCode == 45)
            {
                DisplayErrorMessage("FR Action Cannot Apply to " + ACTIONyy.CaseIdentifier);

                actionsChecked.Remove(ACTIONyy);

            }                
        }
        return;
    }

1 个答案:

答案 0 :(得分:2)

当您在同一列表上进行迭代时,无法从列表中删除项目。一种技术是创建一个新列表,然后迭代新列表。

var toRemove = new List<xxCaseEntity>();

foreach (xxCaseEntity ACTIONyy in actionsChecked)
{
    if(ACTIONyy.XXStatusCode == 40 || ACTIONyy.XXStatusCode == 45)
    {
        toRemove.Add(ACTIONyy);
    }
}

foreach (var item in toRemove )
{
    actionsChecked.Remove(item);
}