Что является значением по умолчанию для буфера в С#?

Логическое значение (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

Его можно рассматривать как защитный подход к программированию из компилятора - перед его использованием должны быть назначены переменные.