以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- BUG收集 (http://foxtable.com/bbs/list.asp?boardid=12) ---- 发现一个Bug,关于With (http://foxtable.com/bbs/dispbbs.asp?boardid=12&id=170073) |
-- 作者:zhuya820 -- 发布时间:2021/7/11 9:58:00 -- 发现一个Bug,关于With 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次是多余的,这问题搞了我昨天一下午,现在汇报给组织,忘改进!
|
-- 作者:有点蓝 -- 发布时间: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) |