比较字符串不能正常工作vb.net

时间:2015-09-07 15:18:40

标签: vb.net equals equals-operator

我试图比较2个字符串(KeyCode和SerialN) 我已经尝试过一堆不同的aproaches ......但正如你在我的打印屏幕上看到的那样,既不是=或等于工作。

你能告诉我出了什么问题吗?

Private Function VerificaKeyCode(SerialN As String) As Boolean
        Dim snEsq As Integer
        Dim snDir As Integer
        Dim KeyCode As String
        Dim buffer As String
        Dim ind As Short

        VerificaKeyCode = False
        buffer = Space(255)
        For ind = 1 To 5
            'UPGRADE_WARNING: App property App.EXEName has a new behavior. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6BA9B8D2-2A32-4B6E-8D36-44949974A5B4"'
            GetPrivateProfileString(My.Application.Info.AssemblyName, "HD" & ind, "", buffer, Len(buffer), My.Application.Info.DirectoryPath & "\ServerHD.ini")
            KeyCode = Trim(buffer)
            If KeyCode <> "" Then
                VerificaKeyCode = KeyCode.Equals(SerialN)
                VerificaKeyCode = CBool(KeyCode = SerialN)
                If VerificaKeyCode Then Exit Function
            End If
        Next ind
    End Function

enter image description here

修改

显然字符串中有一个空字符,我需要以某种方式将其删除

enter image description here

1 个答案:

答案 0 :(得分:1)

监视窗口中的表达式是陈旧的,如禁用的颜色和刷新/回收图标的存在所示。单击图标,将重新评估表达式并更新结果:

enter image description here

模仿你所拥有的,注意第一个表达是陈旧的和错误的。第二个已刷新/重新评估并报告正确的结果。只要执行一行代码,监视表达式就会被标记为陈旧/未更新。

使用.NET返回函数的更好方法是使用局部变量和Return它。 local var允许您通过鼠标悬停轻松查看结果:

  

enter image description here

变量可能超出范围,但不能过时。

编辑4或5显示,虽然监视表达式 陈旧,但我们在pic中看到的既不证明也不反驳字符串不匹配,这显然是VB6 - &gt; .NET翻新(注意102警告)。

我们无法看到GetPrivateProfileString的声明,但使用情况至少不是最理想的。

<DllImport("kernel32.dll", SetLastError:=True)>
Shared Function GetPrivateProfileString(appname As String,
                                        keyname As String, def As String,
                                        sbuffer As StringBuilder, 
                                        nSize As Int32,
                                        strFile As String) As Integer
End Function

注意它是一个函数;它返回读入缓冲区的字符数。而不是Trim不会删除NUL,而是应该使用返回(如果不是字符串构建器)来获取指定的字符数。如果使用字符串缓冲区,则修剪为读取的字符数:

Dim n As Int32 = GetPrivateProfileString(...)
KeyCode = buffer.Substring(0, n)

StringBuilder应该为您做到这一点:

Dim buffer As New StringBuilder(255)
...
Dim n As Int32 = GetPrivateProfileString(..., buffer, buffer.Capacity)
KeyCode = buffer.ToString()

您仍然可以根据字符串的大小检查函数返回。

您可以完全跳过GetPrivateProfileString并使用流阅读器自行阅读该文件。它应该比PInvoke更快,但至少,使用时不那么复杂。