¿Cuál es el valor booleano predeterminado en C#?
(6)
Básicamente, las variables locales no se inicializan automáticamente. Por lo tanto, usarlos sin inicializar produciría una excepción.
Solo las siguientes variables se inicializan automáticamente a sus valores predeterminados:
- Variables estáticas
- Variables de instancia de instancias de clase y estructura
- Elementos de matriz
Los valores predeterminados son los siguientes (asignados en el constructor predeterminado de una clase):
- El valor predeterminado de una variable del tipo de referencia es nulo.
- Para tipos enteros, el valor predeterminado es 0
- Para char, el valor predeterminado es `/ u0000 ''
- Para flotante, el valor predeterminado es 0.0f
- Para el doble, el valor predeterminado es 0.0d
- Para decimal, el valor predeterminado es 0.0m
- Para bool, el valor predeterminado es falso
- Para un tipo de enumeración, el valor predeterminado es 0
- Para un tipo de estructura, el valor predeterminado se obtiene al establecer todos los campos de tipo de valor a sus valores predeterminados
En cuanto a las partes posteriores de su pregunta son conerned:
- La razón por la que se deben inicializar todas las variables que no se inicializan automáticamente a los valores predeterminados es una restricción impuesta por el compilador.
- bool privado foo = falso; Esto es de hecho redundante ya que esta es una variable de instancia de una clase. Por lo tanto, esto se inicializaría en falso en el constructor predeterminado. Por lo tanto, no hay necesidad de configurar esto para que sea falso.
Un booleano ( bool
) no puede ser nulo. Y:
bool foo; if(foo){} // Use of unassigned local variable ''foo''
¿Por qué el valor predeterminado no es falso? Entonces, ¿cuál es el valor si no es nulo? ¿Cual es la razon?
Edit 1 - El valor predeterminado es de hecho falso, pero todas las variables deben inicializarse, ¿por qué? esto es por otra pregunta;)
Editar 2 - con Resharper: private bool foo = false; // Initializing field by default value is redundant
private bool foo = false; // Initializing field by default value is redundant
???
El valor predeterminado es de hecho falso.
Sin embargo, no puede usar una variable local si no se le ha asignado primero.
Puede usar la palabra clave predeterminada para verificar:
bool foo = default(bool);
if (!foo) { Console.WriteLine("Default is false"); }
El valor predeterminado para bool es false
. Consulte http://msdn.microsoft.com/en-us/library/83fhsxwc.aspx para obtener una gran referencia sobre los valores predeterminados. La única razón por la que no sería falso cuando lo verifique es si lo inicializa / configura en verdadero.
Pruebe esto (usando la palabra clave predeterminada)
bool foo = default(bool); if (foo) { }
Puede ser tratado como un enfoque de programación defensiva del compilador: las variables deben asignarse antes de poder usarse.
http://msdn.microsoft.com/en-us/library/83fhsxwc.aspx
Recuerde que no se permite el uso de variables no inicializadas en C #.
Con
bool foo = new bool();
foo tendrá el valor predeterminado.
Boolean por defecto es falso