防止将重复项添加到列表框中
本文关键字:列表 添加 | 更新日期: 2023-09-27 18:25:40
我有这段代码,用于将选定的项目从一个ListBox
添加到另一个。如何防止用户添加项目两次?我希望他们添加到lstBoxToUserProjects
的ListBox
只包含不重复项的不同项。
protected void btnAddSelectedItem_Click(object sender, EventArgs e)
{
List<ListItem> itemsToAdd= new List<ListItem>();
foreach (ListItem listItem in lstbxFromUserProjects.Items)
{
if (listItem.Selected)
itemsToAdd.Add(listItem);
}
foreach (ListItem listItem in itemsToAdd)
{
lstBoxToUserProjects.Items.Add(listItem);
}
}
编辑:以下是我最终使用的
protected void btnAddSelectedItem_Click(object sender, EventArgs e)
{
List<ListItem> itemsToAdd= new List<ListItem>();
foreach (ListItem listItem in lstbxFromUserProjects.Items)
{
if (listItem.Selected)
itemsToAdd.Add(listItem);
}
foreach (ListItem listItem in itemsToAdd)
{
if (!lstBoxToUserProjects.Items.Contains(listItem))
{
lstBoxToUserProjects.Items.Add(listItem);
}
}
}
如果您将lstBoxToUserProjects
列表框绑定到数据源(HashSet),那么您可以进行简单的检查,看看建议选择的项目是否已经在目标中:
foreach(ListItem itemToAdd in itemsToAdd)
{
if (selectedItems.Contains(itemToAdd)) continue;
lstBoxToUserProjects.Items.Add(itemToAdd);
}
注意,我建议使用HashSet,因为这样您就可以对该集进行性能检查,而必须枚举List才能检查匹配。
您只需要在if语句中调用ListBox.Items.Contains()来检查它是否已经添加。
foreach (ListItem listItem in itemsToAdd)
{
if (!lstBoxToUserProjects.Items.Contains(listItem))
{
lstBoxToUserProjects.Items.Add(listItem);
}
}
试试这个:
protected void btnAddSelectedItem_Click(object sender, EventArgs e)
{
lstBoxToUserProjects.Items.AddRange(lstbxFromUserProjects.Items.Where(li => !lstBoxToUserProjects.Items.Contains(li)).ToArray());
}
这至少假定了C#3.5。
将itemsToAdd
从List
更改为HashSet
:
HashSet<ListItem> itemsToAdd= new HashSet<ListItem>();
...
itemsToAdd.Add(listItem) // Adds only new items.
添加MSDN:
返回值
Type:System.Boolean true,如果元素被添加到HashSet(Of T)对象如果元素已经存在,则为false。(gdoron-并且不再插入元素…)
使用
_items_Unique = _items.Distinct().ToList();
方法它很快,然后比较其中_items_Unique和_items是两个列表
List<string> _items_Unique = new List<string>();
List<string> _items = new List<string>();