我有一个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;
}
}
答案 0 :(得分:16)
实际上,您所做的只是更改对局部变量toUpdate
的引用,以指向传入的参数product
。
当你这样做时,让我们退一步:
var toUpdate = productToUpdate.First<ProductInfo>();
您的收藏品(ProductSearchResults
)中有一个参考。您现在可以愉快地更新其属性,ala:
toUpdate.ProductName = product.ProductName;
toUpdate.Price = product.Price;
//etc..
但是,您无法更新集合中的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);
}
}
希望有所帮助。
答案 1 :(得分:3)
var productToUpdate = this.ProductSearchResults.FirstOrDefault(p => p.ID == product.ID);
if (productUpdate != null)
{
productUpdate.Property = product.Property;
...continue for other properties
}
答案 2 :(得分:0)
在C#中,写variable = expression;
为变量赋予一个新值。它不会影响该变量先前引用的值。
在您的示例中,您有一个名为product
的值,即调用者提供的ProductInfo
,以及您从列表中获取的值,该值存储在toUpdate
中,您希望更新。这将涉及根据toUpdate
中的值调用product
的成员函数(或指定属性)。
但是,我怀疑您确实想要更新数据库中找到的产品的产品信息或ProductSearchResults
访问的其他类型的存储。您使用的存储引擎(或您的数据访问层)可能为您提供了保存与某个标识符关联的ProductInfo
的功能,因此您需要做的就是调用该功能。
答案 3 :(得分:0)
是否要更换集合中的产品或更新其中的某些属性?假设后者,这是一个例子:
public void UpdateProductInfo(ProductInfo product)
{
var productToUpdate = this.ProductSearchResults.FirstOrDefault(p => p.ID == product.ID).;
if (productToUpdate == null)
{
// throw exception?
}
else
{
productToUpdate.Price = productInfo.Price; // for example
}
}