2013-05-12 7 views
0

Я плохо проработал последние два дня, чтобы эта часть моего кода работала правильно.C# Сравнение с кортежем

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"); 
    } 
} 

и ...

if (tupleObj.Item2.Equals(ConnectedClientsListView.FocusedItem.SubItems[2].Text)) 

... не получает даже если эти две строки содержат одинаковое значение. Если никогда не пройдет. Как правильно сравнить кортеж obj с listViewItem?

+0

Вы уверены, что они такое же значение? И обе струны? Обратите внимание, что метод 'Equals' использует порядковое (чувствительное к регистру и нечувствительное к культуре) сравнение, так, например, «файл» и «файл» отличаются. –

+0

Я уверен, что оба они содержат одинаковое значение, а также строки. – user1906993

+0

Является ли свойство 'Text' типа' string', или что-то более общее, например 'object'? –

ответ

0

как об этом

if (tupleObj.Item2.ToString().ToLower() == 
     ConnectedClientsListView.FocusedItem.SubItems[2].Text.ToLower()) 

EDIT:

Поскольку вы сказали, что строки IP-адресов, поэтому в этом случае

var firstip = IPAddress.Parse(first_string); 
var secondip = IPAddress.Parse(second_string); 

if (firstip.Equals(secondip)) 
{ 
    Console.WriteLine("Equal!"); 
} 
+0

Либо должно работать. –

+0

Это неправильный способ сделать сравнение без учета регистра. Используйте перегрузку, которая берет перечисление 'StringComparison', и укажите значение, не учитывающее регистр: http://msdn.microsoft.com/en-us/library/system.string.equals.aspx –

+0

Нет, еще верните false. Обе строки содержат «192.168.1.66:123» ip и порт в строке. – user1906993

Смежные вопросы