How to copy listbox items to list and compare the list with another
我有List<string> myList和List<string> myList1对象:我想要
比较它们,如果它们相似,我想弹出一个消息框,但是当我单击按钮时,它什么也没显示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 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,然后又创建了另一个列表并向其中添加相同的列表框项,尽管它们是相同的项,但是我仍然无法匹配布尔等于= myList.SequenceEqual(myList1); if(equal == true){MessageBox.Show(" Matched"); } else {MessageBox.Show("不匹配"); }
-
它对我来说很好用,谢谢大家,我很高兴您的快速回答
List \\是引用,您正在尝试比较2个列表,它们是不同的引用。如果要查看相同项目的顺序是否相同:
1 2 3 4
| if(myList.SequenceEquals(myList1))
{
....
} |
或者它们的顺序可能不同:
1 2 3 4
| if(myList.All(myList1.Contains))
{
....
} |
- 您需要为每个要比较的集合类型实现IEquatable < T >接口。这不是最好的方法,
-
@OlegBondarenko列表是字符串-实现IEquatable<string>。谈论不是最好的方法-导入整个json序列化框架以等于2个列表.....
-
同样,更容易实现IEqualityComparer<T>并将其传递给重载的LINQ方法
-
是的,这无疑是这个问题的狭义答案。此接口实现不需要String。我的意思是关于自定义引用类型。
-
此问题中没有自定义引用类型。您正在回答一个尚未提出的问题。