Ошибка неназначенного значения в C # - PullRequest
0 голосов
/ 23 декабря 2010

если переменная не назначена, то она принимает значение по умолчанию во время выполнения. например

int A1;

если я проверю значение A1 во время выполнения, оно будет равно 0; тогда почему во время компиляции выдает ошибку неназначенного значения; почему CLR не использует значение по умолчанию во время выполнения;

int A1;
int B1 = A1+10;

это должно быть 11, поскольку значение по умолчанию для A1 равно 0;

есть свойство проекта, где я могу проверить «назначить значения по умолчанию для неназначенной переменной»;

Кто-нибудь может сказать мне, где я могу его найти?

Ответы [ 6 ]

3 голосов
/ 23 декабря 2010

Ваше заявление

если переменная не назначена, то она принимает значение по умолчанию во время выполнения

верно только для переменных-членов в классе.

Для локальных переменных внутри функции это неправильно. Локальные переменные внутри функции всегда требуют инициализации.

1 голос
/ 23 декабря 2010

это должно быть 11, поскольку значение по умолчанию для A1 равно 0;

Это точно причина, по которой компилятор C # не позволит вам уйтис использованием неинициализированных переменных.Результатом будет 10, а не 11. После 30-летнего опыта работы с языками C и C ++, которые позволяют использовать неинициализированные переменные, команда C # решила, что это основной источник ошибок и not разрешить это в программе на C #.

Существует множество небольших изменений, подобных этому.Еще один замечательный пример не позволяет перейти к другому случаю в операторе switch .Забыть написать break такая классическая ошибка.Изъятие этих C-измов - отличная идея и большая часть того, почему C # такой замечательный язык.Если вам не нравится идея компилятора как офицера полиции.

Замечание: использование неинициализированной переменной разрешено в VB.NET.

0 голосов
/ 23 декабря 2010

Куча (справочные классы) и конструктор для нулевых структур данных.

Простые типы значений, такие как int, но также ссылки (= указатели) на объекты, не получают значения по умолчанию в стеке.Вы должны всегда устанавливать это.Если это не является обязательным, особенно с указателями объектов, это может быть серьезным нарушением безопасности, поскольку вы указываете на неизвестные местоположения.

Любое значение по умолчанию (например, 0), вероятно, будет неправильным в 50% случаев.

0 голосов
/ 23 декабря 2010

Значение по умолчанию верно для членов класса, но не для локальных функций.Какой бы код вы ни поместили непосредственно в файл [pc] x, генератор кода поместит его в функцию.

0 голосов
/ 23 декабря 2010

Вы говорите о локальных переменных или переменных уровня класса? Правила разные для обоих. Проверьте ответ нашего Джона Скита по этому адресу:

Инициализация полей экземпляра в сравнении с локальными переменными

0 голосов
/ 23 декабря 2010

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

Когда вы присваиваете String = "", это создается для вас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...