Compartir a través de


expresiones de valor predeterminado: genera el valor predeterminado.

Una expresión de valor predeterminada genera el valor predeterminado de un tipo. Hay dos tipos de expresiones de valor predeterminadas: la llamada de operador predeterminada y un literal predeterminado.

También se usa la default palabra clave como etiqueta de mayúsculas y minúsculas predeterminada dentro de una switch instrucción .

operador predeterminado

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 predeterminado

Puede usar el default literal para generar el valor predeterminado de un tipo cuando el compilador puede deducir el tipo de expresión. La default expresión literal genera el mismo valor que la default(T) expresión donde T es el tipo inferido. Puede usar el default literal en cualquiera de los casos siguientes:

En el ejemplo siguiente se muestra el uso del default literal:

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 obtener más información, consulte la sección Expresiones de valor predeterminadas de la especificación del lenguaje C#.

Consulte también