[c#] What is the default boolean value in C#?

A boolean (bool) can't be null. And:

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

Why the default value is not false? So what is the value if it is not null? What is the reason?

Edit 1 - The default value is indeed false - but all variable should be initialized, why? this is for another question ;)

Edit 2 - with Resharper : private bool foo = false; // Initializing field by default value is redundant ???

This question is related to c#

The answer is


Try this (using default keyword)

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

It can be treated as defensive programming approach from the compiler - the variables must be assigned before it can be used.


The default value is indeed false.

However you can't use a local variable is it's not been assigned first.

You can use the default keyword to verify:

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

Basically local variables aren't automatically initialized. Hence using them without initializing would result in an exception.

Only the following variables are automatically initialized to their default values:

  • Static variables
  • Instance variables of class and struct instances
  • Array elements

The default values are as follows (assigned in default constructor of a class):

  • The default value of a variable of reference type is null.
  • For integer types, the default value is 0
  • For char, the default value is `\u0000'
  • For float, the default value is 0.0f
  • For double, the default value is 0.0d
  • For decimal, the default value is 0.0m
  • For bool, the default value is false
  • For an enum type, the default value is 0
  • For a struct type, the default value is obtained by setting all value type fields to their default values

As far as later parts of your question are conerned:

  • The reason why all variables which are not automatically initialized to default values should be initialized is a restriction imposed by compiler.
  • private bool foo = false; This is indeed redundant since this is an instance variable of a class. Hence this would be initialized to false in the default constructor. Hence no need to set this to false yourself.

The default value for bool is false. See this table for a great reference on default values. The only reason it would not be false when you check it is if you initialize/set it to true.