我正在使用vb.net语言在Asp.net中开发Web应用程序,我使用
比较两个字符串" ="和 " String.Equals()"
但我总是得到错误的结果
Dim decod As Decoder = Encoding.UTF8.GetDecoder()
Dim totByt As Byte() = Convert.FromBase64String(Request("numType"))
Dim chrCount As Integer = decod.GetCharCount(totByt, 0, totByt.Length)
Dim deco_char(chrCount) As Char
decod.GetChars(totByt, 0, totByt.Length, deco_char, 0)
Dim str As New String(deco_char)
If str = "MO" Or str.Equals("Mo") Then
//Do somthing
End If
请参阅我的Watch窗口输出 请告诉我为什么这会给我错误的条件以及如何解决它。
答案 0 :(得分:3)
查看String.Equals()的文档,查看第三个参数comparisionType的可能值
String.Equals("MO", str, StringComparison.OrdinalIgnoreCase))
答案 1 :(得分:2)
str
变量的长度为3而不是2,导致它与"MO"
不同。
证明:
Dim decod As Decoder = Encoding.UTF8.GetDecoder()
Dim totByt As Byte() = Convert.FromBase64String("TU8=")
Dim chrCount As Integer = decod.GetCharCount(totByt, 0, totByt.Length)
Dim deco_char(chrCount) As Char
decod.GetChars(totByt, 0, totByt.Length, deco_char, 0)
Dim str As New String(deco_char)
Dim result1 = str.StartsWith("MO") ' is true
Dim result2 = str.Equals("MO") ' is false
Dim length = str.Length ' is 3
显然str
与"MO"
不一样。
请记住,如果您声明一个类似的数组:
Dim deco_char(2) ' an array of 3 elements
...元素的索引范围从0到2,因此它包含3个元素。
解决方案:如果您将第4行替换为:
Dim deco_char(chrCount-1) As Char
..它会起作用,因为现在(在您的具体情况下)您的数组大小为2而不是3.
答案 2 :(得分:0)
试试这个:
str.Equals("MO", StringComparison.CurrentCultureIgnoreCase);