Запретить добавление повторяющихся элементов в список
у меня есть этот код для добавления выбранных элементов из одного 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);
}
}
изменить: Вот что я в итоге использовал
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);
}
}
}
5 ответов
Если вы связываете lstBoxToUserProjects
список к источнику данных (HashSet), то вы можете сделать простую проверку, чтобы увидеть, если элемент, предложенный для выбора уже был в месте назначения:
foreach(ListItem itemToAdd in itemsToAdd)
{
if (selectedItems.Contains(itemToAdd)) continue;
lstBoxToUserProjects.Items.Add(itemToAdd);
}
примечание. Я предлагаю хэш-набор, потому что тогда вы можете выполнить проверку на набор, тогда как список должен быть перечислен для проверки соответствия.
вы должны просто позвонить в ListBox.Предметы.Содержит () в операторе if, чтобы проверить, был ли он уже добавлен.
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
to HashSet
:
HashSet<ListItem> itemsToAdd= new HashSet<ListItem>();
...
itemsToAdd.Add(listItem) // Adds only new items.
Возвращаемое Значение
Тип: System.Логическое значение 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>();