【问题标题】:What is the default boolean value in C#?C# 中的默认布尔值是什么?
【发布时间】:2011-07-28 07:50:52
【问题描述】:

布尔值 (bool) 不能为空。并且:

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

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

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

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

【问题讨论】:

标签: c#


【解决方案1】:

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

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

bool foo = new bool();

foo 将具有默认值。

布尔默认值为 false

【讨论】:

  • 对不起,补充:记住,在 C# 中使用未初始化的变量是不允许的。如链接文章中所示
  • 谢谢!那么你如何解释我的“编辑2”:)
  • 如果调用默认构造函数,将设置默认值。您刚刚用一个值初始化了一个新变量。 “int i”会抛出同样的错误——使用未分配的局部变量——。在初始化时设置值或调用默认构造函数。所以你不会有任何问题:)
  • @Destructor 我认为您的评论有点令人困惑。 resharper 建议 OP 不必初始化布尔字段的原因是因为类中的字段会自动分配其默认值,而局部变量则不会。请参阅下面的answer from Hasan
【解决方案2】:

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

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

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

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

  • 引用类型变量的默认值为 null。
  • 对于整数类型,默认值为 0
  • 对于 char,默认值为 `\u0000'
  • 对于浮点数,默认值为 0.0f
  • 对于double,默认值为0.0d
  • 对于十进制,默认值为 0.0m
  • 对于bool,默认值为false
  • 对于枚举类型,默认值为 0
  • 对于struct类型,通过将所有值类型字段设置为默认值来获得默认值

至于您问题的后面部分:

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

【讨论】:

  • 为了完整起见,default value table at MSDN 表示结构类型的默认值还包括将“所有引用类型字段设置为空”。
【解决方案3】:

默认值确实是假的。

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

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

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

【讨论】:

    【解决方案4】:

    bool 的默认值为false。请参阅this table 以获取有关默认值的重要参考。当您检查它时它不会为假的唯一原因是您将其初始化/设置为真。

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多