Foxtable(狐表)官方栏目BUG收集 → 发现一个Bug,关于With


  共有2879人关注过本帖树形打印复制链接

主题:发现一个Bug,关于With

帅哥哟,离线,有人找我吗?
zhuya820
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:243 积分:1819 威望:0 精华:0 注册:2016/1/21 12:44:00
发现一个Bug,关于With  发帖心情 Post By:2021/7/11 9:58:00 [只看该作者]

Dim Str As String = "0 0" & Chr(10) & Chr(13) & vbcrlf & "0"
Dim Int As Integer
Output.Show("【第1次输出】")
With Str
    Str = Str.Replace(vbcrlf,Chrw(12276))
    Str = Str.Replace(Chr(13),Chrw(12276))
    Str = Str.Replace(Chr(10),Chrw(12276))
    Int = Str.Length
    For I As Integer = 0 To Int - 1
        Output.Show(Ascw(Str.Chars(I)))
    Next
End With
Output.Show("【第2次输出】")
Str = "0 0" & Chr(10) & Chr(13) & vbcrlf & "0"
With Str
    Str = .Replace(vbcrlf,Chrw(12276))
    Str = .Replace(Chr(13),Chrw(12276))
    Str = .Replace(Chr(10),Chrw(12276))
    Int = Str.Length
    For I As Integer = 0 To Int - 1
        Output.Show(Ascw(.Chars(I)))
    Next
End With
【输出结果】
【第1次输出】
48
32
48
12276
12276
12276
48
【第2次输出】
48
32
48
10
13
13
10
48
【问题】
Chr(10)在第2次是多余的,这问题搞了我昨天一下午,现在汇报给组织,忘改进!

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110810 积分:563988 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/7/19 8:59:00 [只看该作者]

这玩意不是bug,再说了这个是.net自身的语法,不是foxtable创造的。

Str = Str.Replace(vbcrlf,Chrw(12276))和Str = .Replace(vbcrlf,Chrw(12276))改变的都是外部的str变量,其实with str内部有一个独立的变量使用,一直没有变过

with 和 end with之间形成了一个独立的程序域,可以把with理解为一个sub方法。自行测试一下下面代码,原理是一样的

全局代码
Public Sub abc(str As String)
Dim s As String = str
s = s.replace("1","A")
End Sub

Public Sub abc2(str As String)
str = str.replace("1","A")
End Sub

命令窗口测试
Dim str As String = "1"
abc(str)
Output.Show(str)
abc2(str)
Output.Show(str)

 回到顶部