Что является значением по умолчанию для буфера в С#?
Логическое значение (bool
) не может быть нулевым. А:
bool foo; if(foo){} // Use of unassigned local variable 'foo'
Почему значение по умолчанию не является ложным? Итак, каково значение, если оно не равно нулю?
В чем причина?
Изменить 1 - Значение по умолчанию действительно ложно - но вся переменная должна быть инициализирована, почему? это для другого вопроса;)
Изменить 2 - с помощью Resharper: private bool foo = false; // Initializing field by default value is redundant
Ответы
Ответ 1
http://msdn.microsoft.com/en-us/library/83fhsxwc.aspx
Помните, что использование неинициализированных переменных в С# недопустимо.
С
bool foo = new bool();
foo будет иметь значение по умолчанию.
Логическое значение по умолчанию: false
Ответ 2
В основном локальные переменные не инициализируются автоматически. Следовательно, использование их без инициализации приведет к исключению.
Только следующие переменные автоматически инициализируются значениями по умолчанию:
- Статические переменные
- Переменные экземпляра экземпляров класса и структуры
- Элементы массива
Значения по умолчанию следующие (назначаются в конструкторе по умолчанию для класса):
- Значение по умолчанию для ссылочного типа по умолчанию равно null.
- Для целых типов значение по умолчанию равно 0
- Для char значением по умолчанию является `\ u0000 '
- Для float значение по умолчанию равно 0.0f
- Для double значение по умолчанию равно 0.0d
- Для десятичного значения значение по умолчанию равно 0.0m
- Для bool значение по умолчанию - false
- Для типа перечисления значение по умолчанию равно 0
- Для типа структуры значение по умолчанию получается путем установки для всех полей типа значений значений по умолчанию
По мере того, как будут затронуты более поздние части вашего вопроса:
- Причина, по которой все переменные, которые не инициализируются автоматически по умолчанию, должны быть инициализированы, является ограничением, налагаемым компилятором.
- private bool foo = false; Это действительно избыточно, поскольку это переменная экземпляра класса. Следовательно, это будет инициализировано false в конструкторе по умолчанию. Поэтому нет необходимости устанавливать это для себя.
Ответ 3
Значение по умолчанию действительно неверно.
Однако вы не можете использовать локальную переменную, если она не назначена первой.
Ключ по умолчанию можно использовать для проверки:
bool foo = default(bool);
if (!foo) { Console.WriteLine("Default is false"); }
Ответ 4
Значение по умолчанию для bool равно false
. См. эту таблицу для отличной ссылки на значения по умолчанию. Единственная причина, по которой это было бы неверно, если вы проверите это, это если вы инициализируете/устанавливаете его в true.
Ответ 5
Попробуйте это (используя ключевое слово по умолчанию)
bool foo = default(bool); if (foo) { }
Ответ 6
Его можно рассматривать как защитный подход к программированию из компилятора - перед его использованием должны быть назначены переменные.