2016-03-18 2 views
0

Ниже приведен фрагмент кода, который вызывает проблемы.Ошибка VB.net с ошибкой сравнения строк

Private Const DOB_VALUE As Integer = 0 
Private Const ADDRESS_VALUE As Integer = 1 
Private Const NAME_VALUE As Integer = 2 

For Each oRecord As KeyValuePair(Of Integer, String) In OriginalFileInfo 
     For Each nRecord As KeyValuePair(Of Integer, String) In WorkingFileInfo 
      Dim OriginalComparisonStringSubstrings As String() = oRecord.Value.ToString.ToLower.Split(":") 
      Dim WorkingComparisonStringSubstrings As String() = nRecord.Value.ToString.ToLower.Split(":") 

      ' Are dates of birth the same? 
      If OriginalComparisonStringSubstrings(DOB_VALUE) Like WorkingComparisonStringSubstrings(DOB_VALUE) Then 
       ' Are the address the same? 
       If OriginalComparisonStringSubstrings(ADDRESS_VALUE) Like WorkingComparisonStringSubstrings(ADDRESS_VALUE) Then 
        ' Dob and address are the same, means we have a valid match. Lets check if the names match 
        If OriginalComparisonStringSubstrings(NAME_VALUE) Like WorkingComparisonStringSubstrings(NAME_VALUE) Then 
         ' dob, address and name matches 
        Else 
         ' Dob and address matches, name does not 
        End If 
       End If 
      End If 
     Next 
    Next 

Проблема в том, что когда я получаю сравнение значений адресов, она всегда терпит неудачу. У меня было окно с часами, и значения идентичны, но они не сравниваются. Вы можете увидеть мой выход окна Watch ниже.

-  WorkingComparisonStringSubstrings {Length=3} String() 
    (0) "4323" String 
    (1) "123 somewhere lane" String 
    (2) "j ii" String 
-  OriginalComparisonStringSubstrings {Length=3} String() 
    (0) "4323" String 
    (1) "123 somewhere lane" String 
    (2) "j ii j. .johnson" String 
    OriginalComparisonStringSubstrings(DOB_VALUE) Like WorkingComparisonStringSubstrings(DOB_VALUE) True Boolean 
    OriginalComparisonStringSubstrings(ADDRESS_VALUE) Like WorkingComparisonStringSubstrings(ADDRESS_VALUE) False Boolean 
    OriginalComparisonStringSubstrings(NAME_VALUE) Like WorkingComparisonStringSubstrings(NAME_VALUE) False Boolean 

Сравнение по двум адресам, которые были бы («123 где-то полоса» Like «123 где-то переулок») должно быть правдой, но возвращает ложь. Мой вопрос заключается в том, почему эти ценности не сравниваются, если они так кажутся равными? В моем коде я использую сравнения «Как», но я также попробовал String.Compare, StrComp, .Equals, = и все остальные варианты сравнения. Кроме того, значения всегда являются строкой с момента их вставки в переменную FileInfo до момента их разделения и сравнения.

У кого-нибудь есть идея, почему они не сравнится?

+0

Похоже, что NAME_VALUE - это то, что терпит неудачу (на основе вашего выходного сигнала). Здесь '' j ii "' не 'Like' (или равно)' 'j ii j. .johnson''. – crashmstr

+0

Я бы рассмотрел массив символов элемента адреса: 'Dim a = OriginalComparisonStringSubstrings (1) .ToCharArray()'. Они выглядят так, как будто они должны совпадать на основе * того, что вы набрали здесь * (снимок экрана был бы приятным). Результат NAME_VALUE верен, вы можете использовать '.StartsWith()', если это достаточно близкое соответствие. – Plutonix

+0

Кроме того, 'Like' предназначен для сопоставления шаблонов [Like Operator (Visual Basic)] (https://msdn.microsoft.com /en-us/library/swf8kaxw.aspx), чего вы, кажется, не делаете. – crashmstr

ответ

0

Мой коллега указал на проблему. В предыдущей версии программы мы динамически меняли значение ADDRESS_VALUE. В этой последней версии мы изменили значения на константное целое число.

Она появляется в этой версии, прежде чем мы сделали ADDRESS_VALUE постоянная, она по-прежнему присваивается новое значение, так что это было на самом деле сравнение NAME_VALUE, а не сравнивая ADDRESS_VALUE которая на самом деле не в состоянии.

Спасибо всем за ваши комментарии. Они были действительно полезны.

0

Я еще не могу прокомментировать, основываясь на рейтинге, но не должен быть список строк? Такие, как:

Dim OriginalFileInfo As New Dictionary(Of Integer, List(Of String)) 

Dim OriginalComparisonStringSubstrings As List(Of String) = oRecord.Value.ToString.ToLower.Split(":") 

когда вы сделаете цикл по словарю,

If OriginalComparisonStringSubstrings(DOB_VALUE) = WorkingComparisonStringSubstrings(DOB_VALUE) Then 
'You found a match. 
end if 
+0

Что бы это значило для сравнения строк? – Plutonix

+0

Ну, я только что закончил писать что-то подобное, что зациклилось на двух словарях, которые сравнивали строковые значения, и это сработало для меня. – Krev32

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