我对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;
}
}
答案 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