Is
运算符在比较两个字符串时工作正常,例如:
Dim str1 As String = "TagnameX"
Dim str2 As String = "TagnameX"
Dim strChk as boolean = str1 Is str2
'strChk returns True
但是当 Substring
提取其中一个字符串时,它返回 false !如下:
Dim str1 As String = "t#1TagnameX"
Dim str1Extract As String = str1.Substring(3, 8)
Dim strArr() = {"Tagname1", "Tagname2", "TagnameX"}
For i = 0 To strArr.Length - 1
If strArr(i) Is str1Extract Then
MsgBox("TagnameX found!")
else
MsgBox("TagnameX was not found!")
End If
Next
'TagnameX was not found!
所以我在某些方面使用它是错误的吗?感谢您的帮助! :)
最佳答案
Is-operator返回两个引用是否相等:即两个变量是否引用内存中的同一位置。
第一个代码片段返回 True
因为对于文字字符串,.NET interns重复,而不是在内存中保留单独的相同副本,因此 str1
和 str2
引用内存中的相同字符串。
第二个代码片段返回 False
,因为 .NET 不一定保留中间字符串,例如 Substring
返回的字符串。因此变量 str
和 strExtract
并不引用同一个字符串。
您应该使用等于运算符=
来比较两个字符串的值。
关于vb.net - 使用 Is 运算符比较循环中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60269602/