什么是C#中的默认布尔值?

布尔( bool )不能为空。 和:

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

为什么默认值不是false? 那么,如果它不是null,那么它的价值是什么? 是什么原因?

编辑1 – 默认值确实是假的 – 但所有的variables应该初始化,为什么? 这是另一个问题;)

编辑2 – 使用Resharper: private bool foo = false; // Initializing field by default value is redundant private bool foo = false; // Initializing field by default value is redundant

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

请记住,在C#中使用未初始化的variables是不允许的。

 bool foo = new bool(); 

foo将具有默认值。

布尔默认值是false

基本上局部variables不会自动初始化。 因此,在不初始化的情况下使用它们将导致exception。

只有以下variables会自动初始化为其默认值:

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

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

  • 引用typesvariables的默认值为null。
  • 对于整数types,默认值是0
  • 对于char,默认值是'\ u0000'
  • 对于float,默认值是0.0f
  • 对于double,默认值是0.0d
  • 对于十进制,默认值是0.0m
  • 对于布尔,默认值是false
  • 对于枚举types,默认值为0
  • 对于结构types,通过将所有值types字段设置为其默认值来获取默认值

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

  • 所有未被自动初始化为默认值的variables都应该被初始化,这是编译器施加的限制。
  • private bool foo = false; 这实际上是多余的,因为这是一个类的实例variables。 因此,这将在默认构造函数中初始化为false。 因此,不需要将其设置为假。

默认值的确是假的。

但是,不能使用局部variables,因为它没有被首先分配。

您可以使用default关键字来validation:

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

bool的默认值是false 。 请参阅此表以获取有关默认值的很好的参考。 当你检查它的唯一原因是它不是假的,如果你初始化/设置为true。

试试这个(使用默认关键字)

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

它可以被视为编译器的防御性编程方法 – variables必须在可以使用之前分配。