如果我在控制臺應用程式中運行這個簡單的代碼:
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();
uj5u.com熱心網友回復:
關于 VB.NET,請查看此處的范圍。在“塊范圍”部分有一個說明如下:
即使變數的范圍僅限于一個塊,它的生命周期仍然是整個程序的生命周期。如果在該程序中多次輸入塊,則每個塊變數都會保留其先前的值。為了避免在這種情況下出現意外結果,明智的做法是在塊的開頭初始化塊變數。
所以這種行為是設計使然,您應該將變數初始化為您的代碼需要的任何值。
我修改了您的代碼以顯示第一次 x 初始化為 0 但之后它保留值 1。
For i As Integer = 1 To 10
Dim s As String = i.ToString()
Dim x As Decimal
Console.WriteLine(x.ToString())
If i = 1 Then
x = Decimal.Parse(s)
End If
Console.WriteLine(x.ToString())
Next
Console.ReadLine()
uj5u.com熱心網友回復:
認為回圈的每次迭代都是它自己的代碼塊,并且狀態沒有延續
它確實“延續”。
int i 作用域為回圈的整個范圍,值從 1 到 10。
該if陳述句僅在第一次迭代時執行,并且x其作用域是外部方法(假設進入回圈)的區域變數,而不僅僅是回圈體。話雖如此,在回圈之后和之外x == 1也是如此。
其實Decimal x;in the loop是多余的,和你有一樣的執行邏輯
string s;
Decimal x;
for (int i = 1; i <= 10; i )
{
s = i.ToString();
if(i == 1)
{
x = Decimal.Parse(s);
}
Console.WriteLine(x);
}
// x still defined here
uj5u.com熱心網友回復:
為了弄清楚你想要什么,它應該是這樣的:
For i As Integer = 1 To 10
If i = 1 Then
Console.WriteLine(Decimal.Parse(i.ToString()))
End If
Next
這將為您提供您想要的相同結果,但它是可讀的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/391701.html
下一篇:“dotnetrun”不運行程式
