C# 如何从列表中添加项目<;T>;进入组合框,但在C中不重复#

C# 如何从列表中添加项目<;T>;进入组合框,但在C中不重复#,c#,wpf,list,combobox,duplicates,C#,Wpf,List,Combobox,Duplicates,在WPF项目中,我有一个名为“项目”的简单列表,其中包含以下内容: EURUSD EURUSD NZDUSD 我想用上面的唯一实例填充一个组合框。因此,我编写了一个foreach循环来遍历“items”成员,然后编写了一个for循环来检查combobox中是否已经存在给定的成员(这样就不会添加重复的成员)。我的代码是: private void Test(object sender, EventArgs e) { comboBox.Items.Clear(); foreach

在WPF项目中,我有一个名为“项目”的简单列表,其中包含以下内容:

EURUSD
EURUSD
NZDUSD
我想用上面的唯一实例填充一个组合框。因此,我编写了一个foreach循环来遍历“items”成员,然后编写了一个for循环来检查combobox中是否已经存在给定的成员(这样就不会添加重复的成员)。我的代码是:

private void Test(object sender, EventArgs e)
{
    comboBox.Items.Clear();
    foreach (var positionz in items)
    {

        if (items.Count == 0) return;
        int combocount = comboBox.Items.Count;
        if (combocount == 0)
        {
            comboBox.Items.Add(positionz.Symbol);
            continue;
        }
        for (int i = 0; i < combocount; i++)
        {

            if (comboBox.Items[i].ToString() == positionz.Symbol)
            {
               label.Content=i + "Good "  + positionz.Symbol + " matches combo item " + comboBox.Items[i].ToString();
                continue;
            }
            else { comboBox.Items.Add(positionz.Symbol); }
            label_Copy.Content = i;
        }

    }
}
private void测试(对象发送方,事件参数e)
{
comboBox.Items.Clear();
foreach(项目中的变量位置Z)
{
如果(items.Count==0)返回;
int combocount=comboBox.Items.Count;
如果(combocount==0)
{
组合框.Items.Add(positionz.Symbol);
继续;
}
for(int i=0;i
标签上的东西只是我试图抓住错误的地方。出于同样的原因,当它匹配副本并继续到下一个“i”时,它仍然会将符号添加到组合框中


我确信我忽略了一些愚蠢的事情,但我无法理解。

撇开数据绑定和可能的平等性问题不谈<代码>使用System.Linq
您可以将完整的
foreach
替换为:

foreach (var symbol in items.Select(i => i.Symbol).Distinct())
{
    combobox.Items.Add(symbol);
}

删除所有这些内容并使用适当的XAML和数据绑定。谢谢,我忘记了系统。Linq能够更好地处理列表。CollectionViewSource更适合这里,@BenediktSchroeder我完全知道这不是一个惯用的WPF解决方案,这表明它超出了这里的范围。。。这与最初的提案非常接近,并且符合OP的要求。它标有WPF!