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

时间:2011-07-28 07:50:52

标签: c#

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

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

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

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

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

6 个答案:

答案 0 :(得分:76)

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

  

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

bool foo = new bool();

foo将具有默认值。

布尔默认值为 false

答案 1 :(得分:22)

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

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

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

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

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

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

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

答案 2 :(得分:9)

默认值确实为false。

但是你不能使用局部变量,因为它没有先被分配。

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

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

答案 3 :(得分:4)

bool的默认值为false。有关默认值的详细参考,请参阅this table。检查它的唯一原因就是它初始化/设置为真。

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

它可以被视为编译器的防御性编程方法 - 必须先分配变量才能使用它。