C# 将更新的对象保存在常规列表中

C# 将更新的对象保存在常规列表中,c#,asp.net,business-objects,C#,Asp.net,Business Objects,我正在努力更新列表中的业务对象 我正在使用一个复选框列表 单击复选框列表项时 我检查它是否存在,如果是,我将其标记为脏(表示用户取消选中某个项目) 如果没有,我会向列表中添加一个新项目(表示用户单击了一个新项目) 并将其存储在视图状态 如何使用脏对象更新通用列表? 在表单更新时,我是否需要将脏对象和新对象分别列出并发送到DB层,或者您会推荐其他方式 这是我的代码,很抱歉逻辑错误,我只是一个新手=( 您无需将其保存回列表。假设ftExclusions是类而不是结构,它总是通过引用传递。这意味着te

我正在努力更新列表中的业务对象

我正在使用一个复选框列表

  • 单击复选框列表项时
  • 我检查它是否存在,如果是,我将其标记为脏(表示用户取消选中某个项目)
  • 如果没有,我会向列表中添加一个新项目(表示用户单击了一个新项目) 并将其存储在视图状态

    如何使用脏对象更新通用列表? 在表单更新时,我是否需要将脏对象和新对象分别列出并发送到DB层,或者您会推荐其他方式

  • 这是我的代码,很抱歉逻辑错误,我只是一个新手=(


    您无需将其保存回列表。假设
    ftExclusions
    是类而不是结构,它总是通过引用传递。这意味着
    templast
    isExist
    都包含对同一对象的引用。并且对象上的任何更改都将从两个位置可见。

    谢谢Alex。是的,这是一个类(愚蠢的业务对象)。编辑…好的,您已经注意到引用在两个位置都可见。我的部分问题已经解决。您如何建议从列表中提取IsDirty和IsNew?使用foreach或任何其他单独的方法?列表排除=tempList.FindAll(e=>e.IsDirty | e.IsNew);@Alex不是说它与您的结论不同,而是参数通常是按值传递的。对于引用类型,引用是按值传递的,对象不是按ref传递的(除非明确指定)@符文fs:说对对象的引用是通过值传递的,或者说对象是通过引用传递的,这只是一种语义。它的意思是一样的。@Alex这两者之间有一个重要的区别。假设我们有两个方法Foo(object x)和Bar(ref object x)。在第一个方法中(reference passed by value),如果你做x=new object()从方法外部看,这是不可见的,就像您在Bar中写入相同的内容(参数通过引用传递)一样,这也会在方法外部产生影响(更改作为参数传递的变量的值),因此在这种情况下并不真正相关,但两者之间存在重要差异
    protected void cblExclusions_SelectedIndexChanged(object sender, EventArgs e)
    {
       if (cblExclusions.SelectedIndex != -1)
        {
            ftExclusions myExclusion=new ftExclusions();  // Business object
            ftExclusionsList myExclusionList=new ftExclusionsList();   // Business Obj. List
            int excId = Convert.ToInt32(cblExclusions.SelectedValue.ToString()); // value of checkbox list item which is clicked
            ftExclusionsList tempList = (ftExclusionsList)ViewState["ftExclusionList"];
    
            ftExclusions isExist =tempList.Find(delegate(ftExclusions tmpExclusion)
                {
                    return (tmpExclusion.excluId == excId);
                });
    
            if (isExist != null)
            {
                isExist.isDirtyExclusion(); // Mark as dirty
                tempList.  // stuck here I don't grasp how to save this back to the list 
            }
            else
            {
                myExclusion = new ftExclusions();
                myExclusion.excluId = excId;
                myExclusion.fTrtID = Convert.ToInt32(lblTreatyNo.Text);
                myExclusion.ftExcluId = -1;     //new record
                myExclusion.isNewExclusion();   // Mark as new
                tempList.Add(myExclusion);
            }
            ViewState["ftExclusionList"] = tempList;                
    
        }
    }