2016-05-29 3 views
0

Я пытаюсь изменить цвет шарика случайным образом, однако, когда я пытаюсь использовать цветовую переменную, чтобы стать цветом сплошной кисти, он говорит, что это не назначен. «Использование неназначенную локальной переменной„ballColour“»При изменении переменной в блоке if/else ошибка говорит о том, что она не назначена

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; 

ответ

4

компилятор не знает, что ваш, если/иначе блок все включено, так что это предупреждение, что ballColour может быть Unassigned. Простое изменение на rand.Next(1, 40); без обновления блока if/else, и это может быть не так.

Способ устранения 1: Инициализировать к чему-то

Color ballColour = Color.White; 

Способ устранения 2: Используйте другое:

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

Это позволяет компилятору "видеть" значение устанавливается для любого и все случаи.

Remedy 3: Весь выше

Initialize к первому значению и пропустить первый тест, чтобы уменьшить код:

Color ballColour = Color.Blue; 

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

Примечания что вторые пары для Random.Next(min, max) является эксклюзивным , поэтому значение никогда не может быть 40. Вероятно, вы хотите rand.Next(1, 41)

1

Проблема здесь в том, что существует вероятность того, что ни одно из условий if не будет выполнено во время выполнения, а во время выполнения следующей строки кода переменная «ballColour» может быть не назначена.

SolidBrush ballColourBrush = new SolidBrush(ballColour);

+0

Этот ответ отлично достаточно, но это говорит именно то, что уже существующий один говорит, с меньшим количеством объяснений. Не совсем уверен, почему вы его добавили. –