C#中的默认布尔值是多少?

Joh*_*nGa 70 c#

boolean(bool)不能为null.和:

bool foo; if(foo){} // Use of unassigned local variable 'foo'
Run Code Online (Sandbox Code Playgroud)

为什么默认值不是假的?那么如果它不是null,它的值是多少?是什么原因?

编辑1 - 默认值确实为false - 但是应该初始化所有变量,为什么?这是另一个问题;)

编辑2 - 与Resharper:private bool foo = false; // Initializing field by default value is redundant???

Des*_*tor 83

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

请记住,不允许在C#中使用未初始化的变量.

bool foo = new bool();
Run Code Online (Sandbox Code Playgroud)

foo将具有默认值.

布尔默认值为false


Has*_*him 22

基本上局部变量不会自动初始化.因此,在不初始化的情况下使用它们会导致异常.

只有以下变量自动初始化为其默认值:

  • 静态变量
  • 类和结构实例的实例变量
  • 数组元素

默认值如下(在类的默认构造函数中指定):

  • 引用类型的变量的默认值为null.
  • 对于整数类型,默认值为0
  • 对于char,默认值为"\ u0000"
  • 对于float,默认值为0.0f
  • 对于double,默认值为0.0d
  • 对于十进制,默认值为0.0m
  • 对于bool,默认值为false
  • 对于枚举类型,默认值为0
  • 对于结构类型,通过将所有值类型字段设置为其默认值来获取默认值

至于你问题的后面部分是如何:

  • 所有未自动初始化为默认值的变量应该初始化的原因是编译器强加的限制.
  • private bool foo = false; 这确实是多余的,因为这是类的实例变量.因此,这将在默认构造函数中初始化为false.因此,不需要自己将其设置为false.

  • 为了完整起见,[MSDN上的默认值表](http://msdn.microsoft.com/en-us/library/vstudio/83fhsxwc.aspx)表示结构类型的默认值还包括设置"所有引用类型字段为空." (4认同)

Pet*_*nov 9

默认值确实为false.

但是,您不能使用局部变量,因为它尚未首先分配.

您可以使用default关键字来验证:

bool foo = default(bool);
if (!foo) { Console.WriteLine("Default is false"); }
Run Code Online (Sandbox Code Playgroud)