gpt4 book ai didi

vb.net - VB.NET 中 block 级变量的作用域是什么?

转载 作者:行者123 更新时间:2023-12-03 21:34:02 24 4
gpt4 key购买 nike

考虑以下代码:

For i As Integer = 0 To 10
Dim str As String = str & " Kratika "
Next

当我附加调试器并检查 i = 10 处的 str 的值时,我看到以下内容:

 Kratika  Kratika  Kratika  Kratika  Kratika  Kratika  Kratika  Kratika  Kratika  Kratika  Kratika 

为什么要连接之前的值?我希望变量每次都设置为 kratika,因为每次它都会声明一个新的 String 对象,对吧?

最佳答案

这是预期的行为。

正如您在对另一个答案的评论中提到的,使用整数而不是字符串连接可能更容易看到:

Sub Main()
For i As Integer = 0 To 5
Dim j As Integer = j + 1
Console.WriteLine(j.ToString())
Next
End Sub

输出如下:

1
2
3
4
5
6

要了解原因,我们转向文档,特别是有关 scope 的部分. j您声明的变量在 block 范围内,因为它是在For 内部声明的堵塞。但是,在 block 范围内声明的变量在其包含过程的整个持续时间内仍保留其值。正如文档在注释中所说:

Even if the scope of a variable is limited to a block, its lifetime is still that of the entire procedure. If you enter the block more than once during the procedure, each block variable retains its previous value. To avoid unexpected results in such a case, it is wise to initialize block variables at the beginning of the block.

所以发生的事情是每次你重新输入 For block ,j仍然有它以前的值(value)。因为首先计算等号的右侧,所以 j 的旧值加1,然后存入j (有效删除 j 的旧内容)。

关于vb.net - VB.NET 中 block 级变量的作用域是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14766144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com