2010-04-27 2 views
2

Что не так с кодом? Почему на втором отчете показана ошибка?Проблемы с переменным положением, C#

string level; 
int key; 

command.CommandText = "SELECT * FROM user WHERE name = 'admin'"; 

connection.Open(); 
Reader = command.ExecuteReader(); 

while (Reader.Read()) 
{ 
    level = Convert.ToString(Reader["level"]); 
    key = Convert.ToInt32(Reader["key"]); 

    MessageBox.Show(level); //Work fine 
} 

MessageBox.Show(level); //Show error: Use of unassigned local variable 'level' 
+0

Эта ошибка появляется только в том случае, если строк нет? – jaltiere

+0

Всегда показывать эту ошибку. – lolalola

ответ

6

Компилятор никакого способа узнать уровень не получил значение. Для всего, что он знает, Reader.Read() всегда возвращает false, оставляя при этом уровень без значения.

Наиболее распространенным решением этой проблемы является просто инициализировать уровень для null (или я согласен с AdaTheDev, string.Empty может быть хорошим выбором, здесь тоже)

4

Если запрос не возвращает никаких результатов, уровню никогда не присваивалось значение.

Вы можете инициализировать переменную при объявлении его, чтобы предотвратить его:

string level = String.Empty; 
+2

Это работает, но я бы порекомендовал решение Мэтта Грира, поскольку нуль - это то, как вы выражаете недостаток значения. –

0

Существует вероятность того, что Reader.Read() возвращает ложь немедленно, и в этом случае «уровень» никогда не будет назначен. Если вы инициализируете переменную string level = string.Empty;, вы обойдете ее.

0

Это всегда хорошая практика для инициализации ваших переменных. C# принудительно показывает это сообщение. Никто не может гарантирует, что переменная уровень будет присвоен внутри некоторое время, - как @AdaTheDev указал

1

установить уровень значения по умолчанию при инициализации переменной

string level = string.Empty; 

компилятор знает, что переменная не может быть назначается внутри цикла while, поскольку это может не выполняться на всех кодах.

Смежные вопросы