【问题标题】:When changing a variable within if / else block an error says it is unassigned在 if / else 块中更改变量时,错误表示它未分配
【发布时间】:2016-05-29 00:11:11
【问题描述】:

我正在尝试随机更改球的颜色,但是当我尝试使用颜色变量成为实心画笔的颜色时,它说它是未分配的。 "使用未赋值的局部变量 '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;

【问题讨论】:

    标签: c# if-statement unassigned-variable


    【解决方案1】:

    编译器不知道您的 if/else 块是包罗万象的,因此警告ballColour 可能未分配。在不更新 if/else 块的情况下对rand.Next(1, 40); 进行简单更改,它可能不会。

    补救措施 1:初始化某物

    Color ballColour = Color.White;
    

    补救措施 2:使用 else:

    ...
    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)

    【讨论】:

      【解决方案2】:

      这里的问题是,有可能在执行期间没有满足任何 if 条件,并且在执行下面的代码行时,变量“ballColour”可能未分配。

      SolidBrush ballColourBrush = new SolidBrush(ballColour);

      【讨论】:

      • 这个答案已经足够好了,但它准确地说明了已经存在的答案,并且解释较少。不太清楚你为什么添加它。
      猜你喜欢
      • 2014-03-05
      • 1970-01-01
      • 1970-01-01
      • 2015-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      相关资源
      最近更新 更多