尝试在Visual Studio Version 15中使用Windows Forms在C#中制作应用程序。 我希望能够检查以确保每个组合框中的每个选定项目都不同。 我发现您可以创建一个控件数组,但我遇到的问题是访问该数组中的值以编程方式检查每个值
如何使用此数组来检查所有值是否都是唯一的并返回一个简单的布尔值?
Control[] statboxes = { comboBoxA, comboBoxB, comboBoxC, comboBoxD, comboBoxE, comboBoxF };
你可以像这样使用 linq:
var result = statboxes.Distinct().Count() == statboxes.Count();
编辑:
要检查唯一的选定项,请尝试以下操作:
var result = statboxes.Select(s => ((ComboBox)s).SelectedItem).Distinct().Count() == statboxes.Select(s => ((ComboBox)s).SelectedItem).Count();
使用Combobox.selectedindex
,您可以根据其索引 nr 选择一个项目。使用 Combobox.selectedvalue
,您可以根据其名称选择项目。
至于选择唯一值,您可以使用 Combobox.Distinct().Count
,这在 t2t 的答案中有解释。
您可以使用HashSet<T>.Add(value)
方法Enumerable.All
扩展方法
// For example combobox values is of type int
var values = new HashSet<int>();
var isUnique = statboxes.All(combobox => values.Add((int)combobox.SelectedValue));
HashSet<T>.Add
方法将返回true
给定值是否已成功添加到集合中,如果给定值已存在,则false
。
使用 ComboBox 数组而不是 Control,这样在执行操作时就无需强制转换它:
ComboBox[] statboxes = { comboBoxA, comboBoxB, comboBoxC, comboBoxD,
comboBoxE, comboBoxF };
然后检查是否所有组合框都具有唯一的选定值:
bool IsAllComboBoxesHasDistinctSelectedValue = statboxes.Select<ComboBox,string>((cb) =>cb.SelectedValue.ToString()).Distinct().Count() == statboxes.Count();