开发者

VB.NET - I'm curious, why does the return from "Right" not work as a string?

If I have a string like input = "AA["

If Right(input, 1) = "[" 开发者_StackOverflow社区Then Do stuff

The If statement returns false, even if I try converting things around to chars, etc etc. But if I do this is returns true:

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

I like knowing little semantics like this, any idea why it comes out this way?


Or don't use Right at all since this is .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


I've seen weird behavior like that when debugging.

In fact, today I had something simlar

 Dim records As Integer
 records = If(o.dr Is Nothing, o.ADO.rs.RecordCount, o.ADO.DS.Tables("tbl").Rows.Count)

That should work, using the rs.RecordCount when dr is nothing, otherwise using the Rows.Count. It didn't, records was ending up as zero. Rewrote it as a full if then/else block and it works.

It's never my first thought that the compiler/debugger/ide is messing things up, but you should keep it in the back of your mind for consideration: the programmers that wrote those programs are just as human and fallible as you or me.


It shouldn't. Are you sure you didn't have a typo? The result of RIGHT is a string, and if the input was truly "AA[" the IF will have passed.

I've never had VB act wonky on something like this.


If the code appears in a form, then the .Right property of the form overrides the string manipulation function. You need to specify the parent namespace - e.g. VisualBasic.Right - to ensure that you get the correct method.


I think you may have some kind of strange overload confusion occuring here.

You are specifiing "Right" (which could be calling a local "Right" function). The function your implying is "Microsoft.VisualBasic.Strings.Right" in most of my code ends up being "Strings.Right" due to the global import.

I would try changing you code to the below and see if it still happens, in order to rule out some overload/scope confusion. (and/or the reduced "Strings.Right")

If Micosoft.VisualBasic.Strings.Right(input, 1) = "[" Then Do stuff 
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜