C# 修改列表并与以前的值进行比较

C# 修改列表并与以前的值进行比较,c#,list,C#,List,我有一个列表,它的大小不是固定的。在每次迭代中,列表中的元素数量可能减少、增加或保持不变,但值不同 在每次迭代中,我都会收到setter中更新的列表,如下所示: public List<int> IconsColor { get { return iconsColorList; } set { newIconsColorList = new List<int>(value); if (ne

我有一个列表,它的大小不是固定的。在每次迭代中,列表中的元素数量可能减少、增加或保持不变,但值不同

在每次迭代中,我都会收到setter中更新的列表,如下所示:

public List<int> IconsColor
{
    get { return iconsColorList; }
    set
    {             
        newIconsColorList = new List<int>(value);

        if (newIconsColorList.Count == iconsColorList.Count && newIconsColorList.All(iconsColorList.Contains))
            return;

        //Else
        nIconsChanged = true;

       //??????????????????????????
       //?????????- How do I update Old list with New values
       //Something like iconsColorList = newIconsColorList;
       //but above line makes the If-condition true since both the lists are same now                                             
    }
}
公共列表图标颜色
{
获取{return iconcolorlist;}
设置
{             
NewIConColor列表=新列表(值);
if(newiconclorlist.Count==iconclorlist.Count&&newiconclorlist.All(iconclorlist.Contains))
返回;
//否则
NiconChanged=true;
//??????????????????????????
//????????-如何使用新值更新旧列表
//像iconcolorlist=newiconcolorlist这样的东西;
//但上面的行使If条件为真,因为两个列表现在是相同的
}
}

如何使用新值(出现在
newiconcolorlist
中)修改上一个列表(
iconcolorlist
)的元素?如果新列表中的元素数大于旧列表中的元素数,则将新元素也添加到旧列表中。

因此您希望合并两个列表(更新并添加新列表):

公共列表图标颜色
{
设置
{
for(int i=0;iiconcolorlist.Count)
{
//将新项目附加到列表的末尾
AddRange(value.Skip(iconcolorlist.Count));
NiconChanged=true;
}
}
}

旁注:我希望缺少一个getter仅仅是因为它不相关。一个没有吸气剂的房产并不是很有用,而且闻起来像鱼。在这种情况下,它将只
返回iconcolorlist

对于setter来说,这是一个非常糟糕的用例。缺少getter本身就是一种代码味道。只写属性?!?你最终会掌握窍门的…不清楚为什么你不能使用
iconcolorlist=value。“在每次迭代中,我都会收到setter中较新的列表,如下所示:“为什么要迭代一个列表,并在每次迭代中分配完整的列表?@TimSchmelter:如果我使用它,那么我认为
IConColorList
newIConColorList
都引用同一个列表,因此,If条件始终为真。”(因为两个列表都是相同的)。@skm:当然,但是你想要什么呢?除了将新元素添加到上一个列表(即
iconcolorlist
),我也想更新元素的值。例如,
previous list=0,0,0,1,0,1
newList=1,0,0,1,1,1,0
那么,我需要更新的列表是
iconcolorlist=1,0,0,1,1,1,0
@skm:所以不仅内容重要,而且位置也重要?你为什么不在之前解释一下要求?是的,我必须检查同一个索引有相同的值或不同的值。@skm IMO这整件事都是一种代码味道。如果你添加一个getter,是什么阻止了用户使用
iconColor.add(123)
并完全绕过setter逻辑。JamieC是对的,也许你想把它变成一种方法
MergeIcons
UpsertIcons
public List<int> IconsColor
{
    set
    {
        for (int i = 0; i < Math.Min(iconsColorList.Count, value.Count); i++)
        {
            if (value[i] != iconsColorList[i])
            {
                iconsColorList[i] = value[i];
                nIconsChanged = true;
            }
        }

        if (value.Count > iconsColorList.Count)
        {
            // append new items to the end of the list
            iconsColorList.AddRange(value.Skip(iconsColorList.Count));
            nIconsChanged = true;
        }
    }
}