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 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 en el default 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#.

Para más información sobre el literal default, consulte la nota de propuesta de características.

Vea también