我有这样的代码,用于从一个项目中添加选定的项目。ListBox
到另一个。如何防止用户两次添加项目? 我想让 ListBox
他们正在增加 lstBoxToUserProjects
只包含不同的项目,没有重复的条目。
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);
}
}
EDIT:这是我最后使用的方法。
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.
返回值
Type.Boolean 如果元素被添加到HashSet(Of T)对象中,则为true;如果元素已经存在,则为false。(gdoron-而不是再次插入元素...)
使用
_items_Unique = _items.Distinct().ToList();
方法,然后比较where _items_Unique和_items是两个列表,这是快的。
List<string> _items_Unique = new List<string>();
List<string> _items = new List<string>();