VB.net 字符串比较失败的问题
VB.net Issue with a string comparison failing
下面是有问题的代码片段。
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
问题是,当我进行地址值比较时,它总是失败。我的手表 window 处于活动状态,值相同但无法比较。您可以在下面看到我的 Watch window 输出。
- 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 something lane” Like “123 something lane”)应该为真但返回假。我的问题是,当这些值看起来如此相等时,为什么它们在比较中会失败?在我的代码中,我使用了 "Like" 比较,但我也尝试了 String.Compare、StrComp、.Equals、= 和所有其他比较变体。此外,从插入 FileInfo 变量到拆分和比较,这些值始终是一个字符串。
有人知道为什么他们不比较吗?
我的同事指出了这个问题。在之前的程序版本中,我们动态改变 ADDRESS_VALUE
的值。在这个最新版本中,我们将值更改为常量整数。
出现在这个版本中,在我们让ADDRESS_VALUE
常量之前,它还在被赋新值,所以它实际上是在比较NAME_VALUE
而不是在比较ADDRESS_VALUE
这实际上会失败。
谢谢大家的评论。他们真的很有帮助。
下面是有问题的代码片段。
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
问题是,当我进行地址值比较时,它总是失败。我的手表 window 处于活动状态,值相同但无法比较。您可以在下面看到我的 Watch window 输出。
- 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 something lane” Like “123 something lane”)应该为真但返回假。我的问题是,当这些值看起来如此相等时,为什么它们在比较中会失败?在我的代码中,我使用了 "Like" 比较,但我也尝试了 String.Compare、StrComp、.Equals、= 和所有其他比较变体。此外,从插入 FileInfo 变量到拆分和比较,这些值始终是一个字符串。
有人知道为什么他们不比较吗?
我的同事指出了这个问题。在之前的程序版本中,我们动态改变 ADDRESS_VALUE
的值。在这个最新版本中,我们将值更改为常量整数。
出现在这个版本中,在我们让ADDRESS_VALUE
常量之前,它还在被赋新值,所以它实际上是在比较NAME_VALUE
而不是在比较ADDRESS_VALUE
这实际上会失败。
谢谢大家的评论。他们真的很有帮助。