我有三组列表框,我将项目从lb1移动到lb2,从lb3移动到lb4,从lb5移动到lb6。左侧的列表框包含相同的项目,如果左侧列表框中的一个或多个项目被添加到右侧的多个列表框中,我不希望用户能够提交页面。例如,lb1,lb3和lb5中的项目A只能保存在lb2,lb4或lb6中,而不能保存在其中的两个或三个中。
我想在提交页面之前执行此检查(稍后我将使用javascript添加验证),我想知道最有效的方法是什么。
将所有项目添加到列表中并检查是否有重复项?
提前致谢。
编辑: 像这样的东西:
List<string> groupList = new List<string>();
foreach (ListItem item in lbFullAccess.Items)
{
groupList.Add(item.Value.ToString());
}
foreach (ListItem item in lbContributor.Items)
{
groupList.Add(item.Value.ToString());
}
foreach (ListItem item in lblReadOnly.Items)
{
groupList.Add(item.Value.ToString());
}
答案 0 :(得分:0)
嗯,有一百种不同的方法可以做到。你对迭代的建议绝对没有错。
你可以用LINQ获得一点乐趣:
public bool AreAllValuesUnique()
{
// Build up a linq expression of all of the ListItems
// by concatenating each sequence
var allItems = lbFullAccess.Items.Cast<ListItem>()
.Concat(lbContributor.Items.Cast<ListItem>())
.Concat(lbReadOnly.Items.Cast<ListItem>());
// Group the previous linq expression by value (so they will be in groups of "A", "B", etc)
var groupedByValue = allItems.GroupBy(i => i.Value);
// Finally, return that all groups must have a count of only one element
// So each value can only appear once
return groupedByValue.All(g => g.Count() == 1);
}
不确定每个集合上调用Cast(将ListItemCollection的每个元素转换为ListItem,导致IEnumerable)的性能,但它可能可以忽略不计。