What is the default boolean value in C#?

2020-02-02 13:04发布

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 ???

标签: c#
6条回答
够拽才男人
2楼-- · 2020-02-02 13:27

Try this (using default keyword)

 bool foo = default(bool); if (foo) { } 
查看更多
甜甜的少女心
3楼-- · 2020-02-02 13:28

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

Remember that using uninitialized variables in C# is not allowed.

With

bool foo = new bool();

foo will have the default value.

Boolean default is false

查看更多
唯我独甜
4楼-- · 2020-02-02 13:29

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.
查看更多
唯我独甜
5楼-- · 2020-02-02 13:31

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.

查看更多
6楼-- · 2020-02-02 13:46

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

查看更多
We Are One
7楼-- · 2020-02-02 13:52

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"); }
查看更多
登录 后发表回答