Expresiones de valor predeterminado (referencia de C#)
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
A partir C# de 7.1, 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
returno 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) ]
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#.
Para más información sobre el literal default, consulte la nota de propuesta de características.