如何更新集合中的元素而不是引用

Gue*_*ync 7 c#

我有一个ProductSearchResults集合,下面的方法打算在该集合中找到一个特定的产品并进行更新.我最终更新指向集合元素的对象而不是它自己的实际元素(我认为)

你能否告诉我如何正确地做到这一点,以便我更新集合中的实际产品

谢谢

public void UpdateProductInfo(ProductInfo product)
    {
        var productToUpdate = this.ProductSearchResults.Where(p => p.ID == product.ID).;

        if (productUpdate.Count() > 0)
        {
            var toUpdate = productToUpdate.First<ProductInfo>();

            toUpdate = product;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Jam*_*iec 17

实际上,您所做的只是将对局部变量的引用更改toUpdate为指向传入的参数product.

当你这样做时,让我们退一步:

var toUpdate = productToUpdate.First<ProductInfo>();
Run Code Online (Sandbox Code Playgroud)

引用了你的集合中的一个项目(ProductSearchResults).您现在可以愉快地更新其属性,ala:

toUpdate.ProductName = product.ProductName;
toUpdate.Price = product.Price;
//etc..
Run Code Online (Sandbox Code Playgroud)

但是,您无法更新集合中的itemn以指向您尝试的方式中的其他/新项目.您可以从集合中删除该itme,如果确实如此,则添加新的itme:

public void UpdateProductInfo(ProductInfo product)
    {
        var productToUpdate = this.ProductSearchResults.Where(p => p.ID == product.ID).;

        if (productUpdate.Count() > 0)
        {
            var toUpdate = productToUpdate.First<ProductInfo>();

            this.ProductSearchResults.Remove(toUpdate);
            this.ProductSearchResults.Add(product);
        }
    }
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.

  • 哪里将返回没有Add或Remove方法的IEnumerable <ProductInfo>.从中创建一个列表将创建一个新列表,这样就无法工作了.如果ProductSearchResults是List <ProductInfo>,则可以使用"查找",然后使用"删除并添加". (2认同)