首页 > 解决方案 > 防止对象类作为项目重复输入到列表框

问题描述

我正在尝试将对象类中的项目添加到列表框中,并检查该项目是否已存在于列表框中。如果是这样,那么我只需删除当前项目并将其替换为当前对象(这只会增加数量和价格),但由于某种原因,if 语句始终为真,如,我正在检查项目名称是否已经存在并且是总是想出它不是(即使它是)。

下面是我的尝试:

 private void AddListItem(OrderItem item)
 {
     if (!lstOrderPad.Items.Contains(item.Name))
     {
         lstOrderPad.Items.Add(string.Format("{0,-5}{1,-15}{2,-10}",
             item.Quantity, item.Name, item.ItemPrice));
     }
     else
     {
         int index = lstOrderPad.Items.IndexOf(item);
         lstOrderPad.Items.RemoveAt(index);
         lstOrderPad.Items.Add(string.Format("{0,-5}{1,-15}{2,-10}",
             item.Quantity, item.Name, item.ItemPrice));
     }
}

标签: c#listboxduplicates

解决方案


这是因为您要向列表添加格式化字符串,但仅与Name属性进行比较。

您正在将以下字符串添加到 List

string.Format("{0,-5}{1,-15}{2,-10}", item.Quantity, item.Name, item.ItemPrice)

但与

if (lstOrderPad.Items.Contains(item.Name))

您应该改为以下

var itemFormat = string.Format("{0,-5}{1,-15}{2,-10}", item.Quantity, item.Name, item.ItemPrice);
if (!lstOrderPad.Items.Contains(itemFormat))
{
    lstOrderPad.Items.Add(itemFormat);
}

推荐阅读