如果我有一个像input =“AA [”
这样的字符串If Right(input, 1) = "[" Then Do stuff
If语句返回false,即使我尝试将事物转换为字符等等。但是如果我这样做则返回true:
Dim temp As String = Right(input, 1)
If temp = "[" Then Do Stuff
我喜欢知道这样的小语义,不知道为什么会这样出来?
答案 0 :(得分:2)
或者根本不使用Right,因为这是.Net
Dim s As String = "AAAAAAA]"
If s.Substring(s.Length - 1, 1) = "]" Then
Stop
End If
'or
If s(s.Length - 1) = "]" Then
Stop
End If
答案 1 :(得分:1)
我在调试时看到了类似的奇怪行为。
事实上,今天我有一些类似的东西
Dim records As Integer
records = If(o.dr Is Nothing, o.ADO.rs.RecordCount, o.ADO.DS.Tables("tbl").Rows.Count)
这应该可行,当dr什么都没有时使用rs.RecordCount,否则使用Rows.Count。它没有,记录结果为零。如果then / else阻止它重写为完整,它可以工作。
我从来没有想过编译器/调试器/ ide会搞砸了,但是你应该把它放在脑海中以供考虑:编写这些程序的程序员就像你或我一样人性化和易犯错误
答案 2 :(得分:0)
不应该。你确定你没有拼写错误吗? RIGHT的结果是一个字符串,如果输入真的是“AA [”则IF将通过。
我从来没有对这样的事情感到不满。
答案 3 :(得分:0)
如果代码出现在表单中,则表单的.Right属性将覆盖字符串操作函数。您需要指定父命名空间 - 例如VisualBasic.Right - 确保您获得正确的方法。
答案 4 :(得分:0)
我认为你可能会遇到某种奇怪的过载混乱。
您正在指定“正确”(可以调用本地“正确”功能)。 在我的大多数代码中,你暗示的函数是“Microsoft.VisualBasic.Strings.Right”,由于全局导入,最终成为“Strings.Right”。
我会尝试将您的代码更改为以下内容并查看是否仍然发生,以排除某些过载/范围混淆。 (和/或减少的“Strings.Right”)
If Micosoft.VisualBasic.Strings.Right(input, 1) = "[" Then Do stuff