C# 比较c中列表中的项目#

C# 比较c中列表中的项目#,c#,list,combobox,C#,List,Combobox,我想将combobox的selecteditem与其他combobox的selecteditem进行比较 为此,我在列表中注册了所有组合框,并将其命名为“panel1kilist” 现在我面临的问题是,当两个组合框中有相同的项时,消息框首先显示“no mattch found”,然后显示“match found”,实际上它首先进入内部循环的else语句,然后进入if语句 private void button1_Click(object sender, EventArgs e)

我想将combobox的selecteditem与其他combobox的selecteditem进行比较 为此,我在列表中注册了所有组合框,并将其命名为“panel1kilist” 现在我面临的问题是,当两个组合框中有相同的项时,消息框首先显示“no mattch found”,然后显示“match found”,实际上它首先进入内部循环的else语句,然后进入if语句

    private void button1_Click(object sender, EventArgs e)
        {
            bool check = false;
            bool check1 = false;[![in this image you can see that there are two same items but message is showing "no match found"][1]][1]
            try[![after clicking on ok button of message box showing "no match found" this message box shows up][1]][1]
            {
                for (int i = 1; i < panel1kilist.Count; i++)
                {
                    for (int j = i + 1; j < panel1kilist.Count; j++)
                    {
                        if (panel1kilist[i].SelectedItem.ToString() == panel1kilist[j].SelectedItem.ToString())
                        {
                            if (check == false)
                            {
                                MessageBox.Show("match found");
                            }
                            check = true;
                        }

                        else
                        {
                            if (check1 == false)
                            {
                                MessageBox.Show("no match found");
                            }
                            check1 = true;
                        }
                    }
                }
            }
            catch (System.NullReferenceException)
            {
                MessageBox.Show("please fill all the boxes first");
            }


        }
private void按钮1\u单击(对象发送者,事件参数e)
{
布尔检查=假;
bool check1=false;[![在此图像中,您可以看到有两个相同的项目,但消息显示“未找到匹配项”][1][1]
尝试[![单击显示“未找到匹配项”的消息框的“确定”按钮后,此消息框将显示][1][1]
{
for(int i=1;i
你的问题不是很清楚,但我还是想给你一些帮助。如评论中所述,代码中存在几个小问题:

1。循环的输出

for (int i = 1; i < panel1kilist.Count; i++)
在开始for循环之前定义bool变量。因此,每当您将变量check和check1设置为true时,if条件check==false和check1==false将不再返回true。因此,除了第一个“找到匹配项”和“未找到匹配项”之外,您永远不会收到任何消息

3。我提出的解决方案

利用foreach循环,在循环显示消息之后,一旦找到匹配项,就中断循环。代码:

var matchFound = false;

foreach (var combobox in panel1kilist)
{
     foreach (var comboboxToMatch in panel1kilist.Skip(1))
     {
          if (combobox.SelectedItem.ToString() == comboboxToMatch.SelectedItem.ToString())
          {
               matchFound = true;
               // Stops the inner loop in case of a match
               break;
          }
     }

     // Stops the outer loop in case of a match
     if(matchFound)
     {
          break;
     }
}

if(matchFound)
{
     MessageBox.Show("match found");
}

请您解释一下什么是有效的,什么是无效的。相同项目和不同项目的输出为假。标签1.Text=“nomatch”;此语句仅在两个组合框中的相同值中运行
myList.Distinct().Count()!=myList.Count()这里您再次检查相同的列表
mylist
问题不太清楚。请编辑问题,并解释您试图实现的目标、用户场景以及预期结果。
HasSameData(List myList)
应该做什么,以及
myList
的数据从何处/如何来。请编辑问题,而不是回答评论:)当我从i=0开始时,问题是相同的,其次,bool变量用于显示消息框一次,如果我不使用bool checks,则消息框显示81次,并且我也使用了您的foreach循环代码,它给出了一次“未找到匹配”和“找到匹配”的输出在组合框中的每个项目选择中,即使有匹配的项目或没有匹配的项目:因此,您希望仅在一次或每次找到匹配项时显示消息“Match found”?完全。。。!!所有组合框中的任何单个匹配项,它应显示一次找到的匹配项,仅在具有不同匹配项的相同情况下显示。。在这种情况下,不应显示匹配项。我更新了答案和代码。请看第三部分“3.我建议的解决方案”,并检查这是否解决了您的问题。顺便说一句:您也可以将MessageBox.Show()放入if条件中,检查SelectedItem是否相等,并删除循环后的最后一个if条件。我只是想告诉你如何利用你的bool指示器
var matchFound = false;

foreach (var combobox in panel1kilist)
{
     foreach (var comboboxToMatch in panel1kilist.Skip(1))
     {
          if (combobox.SelectedItem.ToString() == comboboxToMatch.SelectedItem.ToString())
          {
               matchFound = true;
               // Stops the inner loop in case of a match
               break;
          }
     }

     // Stops the outer loop in case of a match
     if(matchFound)
     {
          break;
     }
}

if(matchFound)
{
     MessageBox.Show("match found");
}