C#元组比较
在过去的两天里,我一直在努力让这部分代码正常工作C#元组比较,c#,comparison,tuples,C#,Comparison,Tuples,在过去的两天里,我一直在努力让这部分代码正常工作 foreach (Tuple<StateObject,string> tupleObj in TCP_Globals.stateObj) { if (tupleObj.Item2.Equals(ConnectedClientsListView.FocusedItem.SubItems[2].Text)) { MessageBox.Show("DEBUG #3"); StateObjec
foreach (Tuple<StateObject,string> tupleObj in TCP_Globals.stateObj)
{
if (tupleObj.Item2.Equals(ConnectedClientsListView.FocusedItem.SubItems[2].Text))
{
MessageBox.Show("DEBUG #3");
StateObject stateObj = tupleObj.Item1; //Obtain the underlying socket management class via remoteIP
MessageBox.Show("DEBUG #4");
}
}
…即使两个字符串包含相同的值,也不会变为true。如果永远不会过去。如何正确比较元组obj和listViewItem?这方面如何
if (tupleObj.Item2.ToString().ToLower() ==
ConnectedClientsListView.FocusedItem.SubItems[2].Text.ToLower())
编辑:
既然你说字符串是IP,那么在这种情况下
var firstip = IPAddress.Parse(first_string);
var secondip = IPAddress.Parse(second_string);
if (firstip.Equals(secondip))
{
Console.WriteLine("Equal!");
}
你确定它们的值相同吗?两条线呢?请注意,
Equals
方法使用序号(区分大小写和区域性)比较,因此例如“file”和“file”是不同的。我确信它们都包含相同的值,也包含字符串。类型为string
的Text
属性,或者像object
这样更一般的东西?这不是进行不区分大小写比较的正确方法。使用接受StringComparison
enum的重载,并指定一个不区分大小写的重载:no,仍然返回false。这两个字符串都包含“192.168.1.66:123”字符串中的ip和端口。@user1906993:在这种情况下,请使用IPAddress
类。它与区分大小写或大写无关,因为它只是数字。我最好的猜测是,确实存在一个细微的差异,您没有注意到这一点,无论您使用何种机制查看。调试并查看该字符串通常是最好的检查方法,但考虑到这里的困难,我还尝试使用Encoding.UTF8.GetBytes(…)
获取每个byte[]
,并将它们与调试器或其他输出进行比较;这样,您就可以完全确定字符中的任何差异(有些字符可能看起来很相似,但字节中没有歧义)。
var firstip = IPAddress.Parse(first_string);
var secondip = IPAddress.Parse(second_string);
if (firstip.Equals(secondip))
{
Console.WriteLine("Equal!");
}