expresiones de valor predeterminado: genera el valor predeterminado
Una expresión de valor predeterminado genera el valor predeterminado de un tipo. Hay dos tipos de expresiones de valor predeterminado: la llamada al operador predeterminado y un literal predeterminado.
También se usa la palabra clave default
como etiqueta de mayúsculas y minúsculas predeterminada dentro de una instrucción switch
.
operador default
El argumento del operador default
debe ser el nombre de un tipo o un parámetro de tipo, como se muestra en el ejemplo siguiente:
Console.WriteLine(default(int)); // output: 0
Console.WriteLine(default(object) is null); // output: True
void DisplayDefaultOf<T>()
{
var val = default(T);
Console.WriteLine($"Default value of {typeof(T)} is {(val == null ? "null" : val.ToString())}.");
}
DisplayDefaultOf<int?>();
DisplayDefaultOf<System.Numerics.Complex>();
DisplayDefaultOf<System.Collections.Generic.List<int>>();
// Output:
// Default value of System.Nullable`1[System.Int32] is null.
// Default value of System.Numerics.Complex is (0, 0).
// Default value of System.Collections.Generic.List`1[System.Int32] is null.
Literal default
Puede usar el literal default
para generar el valor predeterminado de un tipo cuando el compilador puede deducir el tipo de expresión. La expresión literal default
genera el mismo valor que la expresión default(T)
cuando se deduce el tipo T
. Puede usar el literal default
en cualquiera de los casos siguientes:
- En la asignación o inicialización de una variable.
- En la declaración del valor predeterminado de un parámetro de método opcional.
- En una llamada al método para proporcionar un valor de argumento.
- En una instrucción
return
o como una expresión de un miembro con cuerpo de expresión.
En el ejemplo siguiente se muestra el uso del literal default
:
T[] InitializeArray<T>(int length, T initialValue = default)
{
if (length < 0)
{
throw new ArgumentOutOfRangeException(nameof(length), "Array length must be nonnegative.");
}
var array = new T[length];
for (var i = 0; i < length; i++)
{
array[i] = initialValue;
}
return array;
}
void Display<T>(T[] values) => Console.WriteLine($"[ {string.Join(", ", values)} ]");
Display(InitializeArray<int>(3)); // output: [ 0, 0, 0 ]
Display(InitializeArray<bool>(4, default)); // output: [ False, False, False, False ]
System.Numerics.Complex fillValue = default;
Display(InitializeArray(3, fillValue)); // output: [ (0, 0), (0, 0), (0, 0) ]
Sugerencia
Use la regla de estilo de .NET IDE0034 para especificar una preferencia sobre el uso del literal default
en el código base.
Especificación del lenguaje C#
Para más información, consulte la sección Expresiones de valor predeterminado de la especificación del lenguaje C#.