我遇到了一个问题,无法理解在c#中两个列表的区别。
如何获取它们之间的差异?我尝试过使用Except方法,但是没有得到我想要的结果。
例如:这些产品是账单的一部分。
class Product {
public int id_prod;
public int quantity;
public float price;
}
Product prd1 = new Product(){1,2,34};
Product prd2 = new Product(){2,5,20};
Product prd3 = new Product(){3,6,14};
Product prd4 = new Product(){4,9,8};
Product prd5 = new Product(){5,12,70};
Product prd1b = new Product(){1,60,34};
List<Product> oldLst = new List<Product>(){ prd1,prd2,prd3};
List<Product> newLst = new List<Product>(){ prd1b,prd2,prd4,prd5};
请注意,在旧prd1和新prd1之间数量可能会发生变化。
我的问题是当我使用var
lstToDel = oldLst.Except(newLst);
时,lstToDel被填充了oldLst,并没有产生差异。期望的结果是:
lstToDel = new List<Product>(){prd1,prd3};
Equals
和GetHashCode
方法,因此只有引用被比较。 - Tim Schmelterprd1
调用new Product
,而是改变了一个已存在对象的数量和价格吗? - Jon Skeetprd1.quantity = 60;
,则在oldLst
和newLst
中都会有对此对象的引用。因此,oldLst.First().quantity
和newLst.First().quantity
都将等于 60。您确定这就是您想要的吗? - Ivan Gritsenko