【问题标题】:How to copy listbox items to list and compare the list with another [duplicate]如何将列表框项目复制到列表并将列表与另一个列表进行比较[重复]
【发布时间】:2019-05-24 09:51:51
【问题描述】:

我有 List<string> myListList<string> myList1 对象:我想要 比较它们,如果它们相似,我想弹出一个消息框,但是当我单击按钮时它什么也不显示。

list<string> myList =new list<string>();
list<string> myList1 =new list<string>();          
myList1.Add("a");
myList1.Add("r");
myList1.Add("u");
myList1.Add("y");

foreach (string str in listBox1.Items)
{
    myList.Add(str);
}

if (myList==myList1)
{
    MessageBox.Show("Matched");
}
else { MessageBox.Show("Not matched"); }

【问题讨论】:

  • 你应该使用SequenceEqual方法:docs.microsoft.com/en-us/dotnet/api/…
  • 另外,您能否澄清一下“类似”一词的含义?
  • 感谢您的快速重播我的意思是“相似”匹配,列表框的项目集合是“a”“b”“c”“d”我做了一个按钮将这些项目复制到列表中并调用 myList 然后我创建了另一个列表并向其中添加相同的列表框项目,尽管它们是相同的项目,但我仍然没有匹配 bool equal = myList.SequenceEqual(myList1); if(equal == true) { MessageBox.Show("Matched"); } else { MessageBox.Show("不匹配"); }
  • 它非常适合我,谢谢你们,我很高兴你们的快速回答

标签: c#


【解决方案1】:

List 是参考,您正在尝试比较 2 个列表,它们是不同的参考。如果您想查看相同的项目是否在相同的顺序:

if(myList.SequenceEquals(myList1))
{
     ....
}

或者如果它们的顺序不同:

if(myList.All(myList1.Contains))
{
     ....
}

【讨论】:

  • 您需要为要比较的每个集合类型实现 IEquatable 接口。这不是最好的方法,
  • @OlegBondarenko 列表是字符串 - which implement IEquatable&lt;string&gt;。谈论不是最好的方法 - 导入整个 json 序列化框架以等同于 2 个列表.....
  • 另外,impelement IEqualityComparer&lt;T&gt; 并将其传递给重载的 LINQ 方法更容易
  • 是的,这个问题的答案无疑是狭隘的。此接口实现不需要字符串。我的意思是自定义引用类型。
  • 此问题中没有自定义引用类型。您正在回答一个尚未被问到的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
  • 2021-10-17
相关资源
最近更新 更多