【发布时间】:2020-11-12 15:42:05
【问题描述】:
我有一个 IList ,我还有一个方法可以检查项目是否已经在列表中,如果它是我需要删除/删除并再次添加。
private PurchaseItemViewModel CheckSessionPurchaseItemViewModel(long purchaseLevelId)
{
bool itemFound = false;
PurchaseItemViewModel purItem = new PurchaseItemViewModel();
foreach (var item in UserSession.UserDataPurchaseItems)
{
if (item.PurchaseLevelId == purchaseLevelId)
{
itemFound = true;
purItem.Note = item.Note;
purItem.PurchaseAmount = item.PurchaseAmount;
purItem.PurchaseLevelId = item.PurchaseLevelId;
}
}
if (itemFound)
{
return purItem;
}
return null;
}
如果上面的方法找到了购买的物品,那么它返回一个对象,否则返回null。
IList<PurchaseItemViewModel> purchaseSessionList = UserSession.UserDataPurchaseItems;
PurchaseItemViewModel pItem = CheckSessionPurchaseItemViewModel(levelId);
if(pItem != null)
{
purchaseSessionList.Remove(item);
}
所以问题在于下面的行它没有删除项目,它甚至没有错误。
**purchaseSessionList.Remove(item);**
【问题讨论】:
-
请发布重现该问题的示例。
Remove将根据对象的IComparable<T>(或IComparable)实现删除找到的第一个实例。请注意,类的默认实现是参考比较。您如何检测该项目是否存在?pItem和item之间是什么关系(以及item定义为)? -
item 是 PurchaseItemViewModel 列表中的 PurhcaseItemViewModel
-
那么
PurchaseItemViewModel是如何实现IComparable<T>的呢?检测项目已存在的代码在哪里? -
您是否尝试过更改为 List 而不是 IList,然后当您从 UserSession 中提取项目时,然后调用 ToList()。
-
很可能您的视图模型没有实现
IComparable<T>。因此Remove-方法无法指示两个项目是否相等。因为它找不到任何相等的项目,所以它不会删除任何项目。
标签: c# entity-framework linq .net-core asp.net-core-2.0