我正在研究类似以下的一些C#代码:

public class Item
{
   public bool flag { get; set; }
   public string itemName { get; private set;};

   Item(string _name)
   {
       this.itemName = _name;
       this.flag     = false;
   }
}

public class MainClass
{
    public static void Main()
    {
        List itemList = new List<Item>();
        itemList.Add(new Item("ProductA");
        itemList.Add(new Item("ProductA");
        itemList.Add(new Item("ProductB");

        var itemGroups = from item in itemList group item by item.itemName;
        foreach (var itemGroup in itemGroups)
        {
            foreach (Item i in itemGroup)
            {
                i.flag = true;
                break;
            }
        }
    }
 }


我要在这里实现的是只更改一个组中的一个项目,而不触动同一组中的其他项目。从以上代码中,我期望只有itemName为“ ProductA”的第一项的标志设置为true。但是结果是两个项目(具有itemName“ ProductA”)的标志都设置为true。

我是linq的新手。我做错了吗?或者我如何在这里实现目标?

非常感谢!!!

道格

最佳答案

我无法重现您的方案,因为每个方案的Item类型都是唯一的。可能在您的代码中,您可能不小心将一个项目两次添加到了列表中,例如

Item item1 = new Item("ProductA");
listItem.Add(item1);
....
listItem.Add(item1);


在这种情况下,在以后的任何时间点,如果将项目名称更新为“ ProductA”,则该更改将反映在列表的两个元素中。请检查这种情况。

关于c# - 为什么更改linq组中的一项会影响同一组中的其他项?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16634358/

10-11 16:08