变量范围错误

时间:2017-11-19 17:01:43

标签: c# variables scope

我对C#编程很陌生。

我在程序中发现这个奇怪的范围错误,我的程序将无法运行。它在下面说(在lbl [tx] .BackColor = Color.DarkViolet;)“使用未分配的局部变量”。但是我已经在我的方法中声明了变量tx。

如何解决这个问题?非常感谢任何帮助。

        async void ShellSort()
    {
        int n = num.Length;
        int gap = n / 2;
        int temp;
        int tx; /// Already declared tx here

        while (gap > 0)
        {
            for (int i = 0; i + gap < n; i++)
            {

                int j = i + gap;
                temp = int.Parse(lbl[j].Text);


                while (j - gap >= 0 && temp < int.Parse(lbl[j - gap].Text))
                {
                    lbl[j-gap].BackColor = Color.Blue;
                    lbl[j].BackColor = Color.Blue;

                    await Task.Delay(time1);
                    lbl[j].Text = lbl[j - gap].Text;
                    tx = j;
                    j = j - gap; 
                }
                lbl[j].Text = temp.ToString();
                lbl[j].BackColor = Color.DarkViolet;
                lbl[tx].BackColor = Color.DarkViolet; /// When I used
                /// it here it wont work.
            }

            gap = gap / 2;
        }
    }

2 个答案:

答案 0 :(得分:1)

声明变量,但不要分配任何内容:

int tx;

可能在你的循环中分配给它:

while (j - gap >= 0 && temp < int.Parse(lbl[j - gap].Text))
{
    //...
    tx = j;
    //...
}
// use tx here

但是,如果该循环条件以false开头会发生什么?如果从未输入循环,则不会分配任何值。编译器不会冒这个风险。虽然可能为其赋值,但编译器需要确保执行为其赋值。

您可以通过简单地为其指定默认值来执行此操作:

int tx = 0;

当涉及到属性等等时,整数默认为0。所以人们也可以对局部变量做同样的事情。

答案 1 :(得分:0)

如果while的正文永远不会被执行,tx将被取消分配。编译器只是告诉您这个案例需要初始值。

所以而不是

int tx;

int tx = 0; // or what is the correct value for you