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

时间:2011-06-23 20:31:22

标签: vb.net

如果我有一个像input =“AA [”

这样的字符串
If Right(input, 1) = "[" Then Do stuff

If语句返回false,即使我尝试将事物转换为字符等等。但是如果我这样做则返回true:

Dim temp As String = Right(input, 1)
If temp = "[" Then Do Stuff

我喜欢知道这样的小语义,不知道为什么会这样出来?

5 个答案:

答案 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