下面是有問題的代碼的瑕疵。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某處車道」)應該是真實的比較,而是返回false。我的問題是,爲什麼當這些價值觀如此明顯相等時,這些價值觀相比是失敗的?在我的代碼中,我使用「Like」比較,但我也嘗試了String.Compare,StrComp,.Equals,=和其他每種比較變體。另外,從插入到FileInfo變量到分割和比較時,這些值始終是一個字符串。
任何人都有一個想法,爲什麼他們不會比較?
它看起來像'NAME_VALUE'是什麼失敗(根據您的手錶輸出)。這裏「j ii」不是「Like」(或者等於)「j ii j .johnson」。 – crashmstr
我會檢查地址元素的char數組:Dim a = OriginalComparisonStringSubstrings(1).ToCharArray()'。這些看起來像他們應該基於*你在這裏輸入*(屏幕截圖會很好)。 NAME_VALUE結果是正確的,如果這個匹配足夠接近,可以使用'.StartsWith()' – Plutonix
另外,'Like'用於模式匹配[Like Operator(Visual Basic)](https://msdn.microsoft.com /en-us/library/swf8kaxw.aspx),你似乎沒有這樣做。 – crashmstr