【发布时间】:2022-01-24 00:32:52
【问题描述】:
如果我在控制台应用程序中运行这个简单的代码:
For i As Integer = 1 To 10
Dim s As String = i.ToString()
Dim x As Decimal
If i = 1 Then
x = Decimal.Parse(s)
End If
Console.WriteLine(x.ToString())
Next
Console.ReadLine()
出乎意料的是,x 保留了它的值 1,因此 1 被打印了 10 次。我认为循环的每次迭代都是它自己的代码块,并且状态没有延续?为什么会这样?我希望x 的默认值为System.Decimal。
同样的事情发生在 C# 中,除了编译器不允许您在未初始化的变量上调用 ToString(),但如果您在 Visual Studio 中设置断点,您可以看到 x 保留其值 1。
for (int i = 1; i <= 10; i++)
{
string s = i.ToString();
Decimal x;
if(i == 1)
{
x = Decimal.Parse(s);
}
// Value of x remains 1
}
Console.ReadLine();
【问题讨论】:
-
你不需要
ToString,只需使用Console.WriteLine(x) -
如果你想在每次迭代时初始化
x,使用Dim x As Decimal = 0。 -
对于 C#,在循环中,当 i 等于 2 到 10 时,x 尚未被赋值。如果您能够编译和运行程序,则不能依赖 x 的值。当我尝试使用试图打印 x 的行来编译它时,我会收到一个编译错误,指出 x 的值未分配。
-
按预期工作 -> 只有在 i = 1 时才更改 x 值,所以.... 有什么问题?