Каково логическое значение по умолчанию в C#?


логическое (bool) не может быть null. И:

bool foo; if(foo){} // Use of unassigned local variable 'foo'

почему значение по умолчанию не false? Так что же такое значение, если оно не равно null? В чем же причина?

Edit 1 - значение по умолчанию действительно false - но все переменные должны быть инициализированы, почему? это уже другой вопрос ;)

редактировать 2 - с Resharper:private bool foo = false; // Initializing field by default value is redundant ???

6 58
c#

6 ответов:

http://msdn.microsoft.com/en-us/library/83fhsxwc.aspx

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

С

bool foo = new bool();

foo будет иметь значение по умолчанию.

логическое значение по умолчанию ложные

в основном локальные переменные не инициализированы автоматически. Следовательно, использование их без инициализации приведет к исключению.

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

  • статические переменные
  • переменные экземпляра класса и struct экземпляров
  • элементы массива

значения по умолчанию (задается в конструкторе по умолчанию класс):

  • значение по умолчанию для переменной ссылочного типа null.
  • для целочисленных типов значение по умолчанию равно 0
  • для char значение по умолчанию '\u0000'
  • для float значение по умолчанию равно 0.0 f
  • для double значение по умолчанию равно 0.0 d
  • для decimal значение по умолчанию равно 0.0 m
  • для bool, значение по умолчанию false
  • для типа перечисления значение по умолчанию равно 0
  • для тип структуры, значение по умолчанию получается путем установки для всех полей типа значения их значений по умолчанию

Что касается более поздних частей вашего вопроса:

  • причина, по которой все переменные, которые не инициализируются автоматически значениями по умолчанию, должны быть инициализированы, - это ограничение, наложенное компилятором.
  • private bool foo = false; это действительно избыточно, так как это переменная экземпляра класса. Следовательно, это будет инициализировано в false в конструкторе по умолчанию. Следовательно, нет необходимости устанавливать это ложь себе.

значение по умолчанию действительно false.

однако вы не можете использовать локальную переменную, если она не была назначена первой.

вы можете использовать ключевое слово default для проверки:

bool foo = default(bool);
if (!foo) { Console.WriteLine("Default is false"); }

значение по умолчанию для типа bool false. Смотрите в этой таблице большой справочник по умолчанию. Единственная причина, по которой он не будет ложным, когда вы проверяете его, - это если вы инициализируете/устанавливаете его в true.

попробуйте это (используя ключевое слово default)

 bool foo = default(bool); if (foo) { } 

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