什么是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必须在可以使用之前分配。