VB.NET-我很好奇,为什么“ Right”的返回不能用作字符串?

| 如果我有一个类似input = \“ AA [\”的字符串
If Right(input, 1) = \"[\" Then Do stuff
即使我尝试将事物转换为char等,If语句也会返回false。但是,如果执行此操作,则返回true:
Dim temp As String = Right(input, 1)
If temp = \"[\" Then Do Stuff
我喜欢了解这样的少量语义,知道为什么会这样吗?     
已邀请:
        在调试时,我已经看到过类似的怪异行为。 实际上,今天我有一些相似之处
 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。没有,记录最终为零。将其重写为完整的if / else块,即可正常工作。 我从来没有想到,编译器/调试器/ IDE会把事情弄糟,但是您应该把它放在脑海中以供考虑:编写这些程序的程序员和您我一样人情和容易犯错。     
        或根本不使用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
    
        不应该。您确定没有错字吗? RIGHT的结果是一个字符串,如果输入确实是\“ AA [\”,则IF将通过。 我从来没有像这样的事情让VB变态。     
        如果代码以表单形式出现,则表单的.Right属性将覆盖字符串操作函数。您需要指定父名称空间-例如VisualBasic.Right-确保您获得正确的方法。     
        我认为您可能在这里发生某种奇怪的过载混乱。 您正在指定\“ Right \”(可能正在调用本地\“ Right \”函数)。 由于全局导入,您暗示的函数为\“ Microsoft.VisualBasic.Strings.Right \”在我的大多数代码中最终为\“ Strings.Right \”。 我会尝试将您的代码更改为以下代码,看看它是否仍然发生,以排除某些过载/作用域混乱。 (和/或减少的\“ Strings.Right \”)
If Micosoft.VisualBasic.Strings.Right(input, 1) = \"[\" Then Do stuff 
    

要回复问题请先登录注册