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

C#中的默认布尔值是什么?,c#,C#,布尔值(bool)不能为空。以及: bool foo; if(foo){} // Use of unassigned local variable 'foo' 为什么默认值不是false?那么,如果该值不为null,那么该值是多少? 原因是什么 编辑1-默认值确实为false-但是所有变量都应该初始化,为什么?这是另一个问题;) 编辑2-使用Resharper:private bool foo=false;//初始化字段默认值是冗余的? 请记住,不允许在C#中使用未初始化的变量 与 foo将具

布尔值(
bool
)不能为空。以及:

bool foo; if(foo){} // Use of unassigned local variable 'foo'
为什么默认值不是false?那么,如果该值不为null,那么该值是多少? 原因是什么

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

编辑2-使用Resharper:
private bool foo=false;//初始化字段默认值是冗余的

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

foo将具有默认值


布尔值默认值为false

布尔值的默认值为
false
。有关默认值的详细参考,请参阅。当您检查它时,它不会为false的唯一原因是如果您将其初始化/设置为true。

默认值确实为false

但是,您不能使用局部变量,因为它没有首先赋值

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

bool foo = default(bool);
if (!foo) { Console.WriteLine("Default is false"); }
试试这个(使用默认关键字)


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

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

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

  • 静态变量
  • 类和结构实例的实例变量
  • 数组元素
默认值如下(在类的默认构造函数中指定):

  • 引用类型变量的默认值为null
  • 对于整数类型,默认值为0
  • 对于char,默认值为“\u0000”
  • 对于float,默认值为0.0f
  • 对于double,默认值为0.0d
  • 对于十进制,默认值为0.0m
  • 对于bool,默认值为false
  • 对于枚举类型,默认值为0
  • 对于结构类型,默认值是通过将所有值类型字段设置为其默认值获得的
至于你问题的后面部分:

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

抱歉,补充:请记住,不允许在C#中使用未初始化的变量。如链接文章所示,谢谢!因此,如何解释我的“编辑2”:)如果调用默认构造函数,将设置默认值。您刚刚用一个值初始化了一个新变量。“int i”将抛出相同的错误-使用未分配的局部变量-。在初始化时设置值或调用默认构造函数。所以你不会有任何问题:)@Destructor我觉得你的评论有点让人困惑。resharper建议OP不必初始化布尔字段的原因是,类中的字段会自动分配其默认值,而局部变量则不会。请参阅下面的内容。您可能会对完整性感兴趣,它说结构类型的默认值还包括设置“所有引用类型字段为null”
bool foo = default(bool);
if (!foo) { Console.WriteLine("Default is false"); }
 bool foo = default(bool); if (foo) { }