在if / else块中更改变量时,错误表明它未被分配

时间:2016-05-29 00:11:12

标签: c# if-statement unassigned-variable

我试图随机改变球的颜色但是当我尝试使用颜色变量成为实心刷的颜色​​时,它表示它是未分配的。 “使用未分配的局部变量'ballColour'”

    xPos = xPos + GAP_SIZE;
    int colour = rand.Next(1, 40);
    Color ballColour;
    if (colour >= 1 && colour <= 9)
    {
        ballColour = Color.Blue;
    }
    else if (colour >= 10 && colour <= 19)
    {
        ballColour = Color.Orange;
    }

    else if (colour >= 20 && colour <= 29)
    {
        ballColour = Color.Green;
    }
    else if (colour >= 30 && colour <= 39)
    {
        ballColour = Color.Red;
    }
    else if (colour == 40)
    {
        ballColour = Color.Purple;
    }
    SolidBrush ballColourBrush = new SolidBrush(ballColour); //This is the one that returns the error.
    paper.FillEllipse(ballColourBrush, xPos, yPos, BALL_SIZE, BALL_SIZE);
                    xPos = xPos + BALL_SIZE;

2 个答案:

答案 0 :(得分:4)

编译器不知道你的if / else块是包含所有内容的,因此警告ballColour可能是未分配的。在不更新if / else块的情况下对rand.Next(1, 40);进行简单更改,但可能不是。

补救措施1:初始化为某种内容

Color ballColour = Color.White;

补救措施2:使用其他:

...
else                //if (colour == 40)
{
    ballColour = Color.Purple;
}

这允许编译器“看到”为任何和所有情况设置的值。

补救措施3:以上所有

初始化为第一个值并跳过第一个测试以减少代码:

Color ballColour = Color.Blue;

if (colour >= 10 && colour <= 19)
...
else     
{
    ballColour = Color.Purple;
}

注意Random.Next(min, max)的第二个参数是独占,因此该值永远不会是40.您可能需要rand.Next(1, 41)

答案 1 :(得分:1)

这里的问题是,在执行期间和执行下面的代码行时,有可能没有满足if条件,变量&#34; ballColour&#34;可以是未分配的。

SolidBrush ballColourBrush = new SolidBrush(ballColour);