理解一段代码

Dar*_*Fan 4 vb.net vb6

我做C#,没有VB的经验,我没有安装任何VB.我一直在看下面的代码,了解它是如何工作的,有人可以看看这个吗?

因此,如果我用Cat和调用此方法并且cat不传递可选参数,它是否返回true并说Cat并且cat相等?

Public Function AreStringsEqual(ByRef sString1 As String, ByRef sString2 As String, Optional ByVal eCompareMethod As VbCompareMethod = vbBinaryCompare) As Boolean

  If LenB(sString1) = LenB(sString2) Then
    If LenB(sString1) = 0 Then
      AreStringsEqual = True
    ElseIf eCompareMethod = vbBinaryCompare Then
      AreStringsEqual = (InStrB(1, sString1, sString2, eCompareMethod) <> 0)
    Else
      AreStringsEqual = (StrComp(sString1, sString2, eCompareMethod) = 0)
    End If
  End If
End Function
Run Code Online (Sandbox Code Playgroud)

Kon*_*lph 12

这是一些奇怪的代码.无论如何,第三个参数的默认值vbBinaryCompare意味着"Cat"并且"cat"将比较不相等.为了使它们相等,你需要通过vbTextCompare.

现在这就是为什么代码很奇怪:它完全是多余的.你可以直接打电话StrComp.

  • 值得注意的是,"文本"比较远比简单不区分大小要复杂得多.有特定于语言环境的字符组合可以完全不同但比较相同.示例:`StrComp("oe","œ",vbTextCompare)`对于大多数英语语言环境返回0(相等). (4认同)
  • "这很可能是一个错误,因为它会将这两个字符串视为相同:"foobarbaz"和"bar"(但不是相反!)." 完全是假的.如果传递的字符串长度不同,则检查甚至不会运行,因为原来的`如果LenB(sString1)= LenB(sString2)`传递两个不同长度的字符串将始终返回false. (2认同)
  • @DarkNightFan不,他们将*不相等 - 请参阅答案.Daniel的推荐仅涉及我(现已删除)关于在提供第三个参数时会发生什么,当它设置为`vbTextCompare`时以及此时字符串长度不等的情况. (2认同)
  • 只是想让你知道他们没有直接调用strComp的可能原因.愚蠢的优化尝试:我尝试了很多乐趣.做`InStrB(1,sString1,sString2,vbBinaryCompare)`每1000万次迭代比`StrComp(sString1,sString2,vbBinaryCompare)`节省.06-.1秒.唯一的问题是由于所有运行的条件检查,所有节省的时间都会丢失.正如你所说,这实际上可以改写为两行. (2认同)