代码之家  ›  专栏  ›  技术社区  ›  Scott

vb.net不用于字符串比较

  •  2
  • Scott  · 技术社区  · 14 年前
    If Object.Value IsNot "Something" Then
    

    你能做到这一点吗,或者在某些情况下它是行不通的?不确定这是否应该只用于整数和布尔值。

    谢谢!

    3 回复  |  直到 14 年前
        1
  •  5
  •   JaredPar    14 年前

    我不确定这是否有效,但如果有效,使用它将是一个非常坏的主意。这个 Is IsNot VB.NET中的运算符执行引用比较。处理时 String 您几乎总是希望对值进行比较, = <> .

    引用比较告诉你它是否真的指向同一个对象。在.NET中,很可能在两个对象中捕获相同的字符串,从而导致以下情况的混淆

    Function CreateFoo() As String
      return "foo"
    End Function
    
    Dim str1 = "foo"
    Dim str2 = CreateFoo()
    if str1 Is str2 Then
      ' This is possible
    Else
      ' This is also possible
    End If
    

    价值比较在这里提供了更多的理智

    Dim str1 = "foo"
    Dim str2 = CreateFoo()
    if str1 = str2 Then
      ' This will run
    Else
      ' This is simply not possible
    End If
    
        2
  •  3
  •   Jonathan Allen    14 年前

    也就是说,如果object.value和“something”实际上是同一个对象。

    99.999%的时候,你不在乎。你只关心它们在语义上是否相等,也就是说它们都包含“something”这个词。

        3
  •  1
  •   Gabe Timothy Khouri    14 年前

    从文档中:“IsNot运算符确定两个对象引用是否引用不同的对象。”

    因此,您不希望将字符串与它进行比较,因为两个相同的字符串实际上不太可能引用同一对象。只有当它们是编译时常量、被实习生或同一变量的两个副本时,才会发生这种情况。