Condividi tramite


espressioni di valore predefinito: produrre il valore predefinito

Un'espressione di valore predefinita produce il valore predefinito di un tipo. Esistono due tipi di espressioni di valore predefinite: la chiamata dell'operatore predefinito e un valore letterale predefinito.

È anche possibile usare la default parola chiave come etichetta case predefinita all'interno di un'istruzioneswitch .

Operatore predefinito

L'argomento dell'operatore default deve essere il nome o il parametro di un tipo, come illustrato nell'esempio seguente:

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.

valore letterale predefinito

È possibile usare il default valore letterale per produrre il valore predefinito di un tipo quando il compilatore può dedurre il tipo di espressione. L'espressione default letterale produce lo stesso valore dell'espressione default(T) dove T è il tipo dedotto. È possibile usare il default valore letterale in uno dei casi seguenti:

L'esempio seguente illustra l'utilizzo del default valore letterale:

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) ]

Suggerimento

Usare la regola di stile .NET IDE0034 per specificare una preferenza per l'uso default del valore letterale nella codebase.

Specificazione del linguaggio C#

Per altre informazioni, vedere la sezione Espressioni valore predefinite della specifica del linguaggio C#.

Vedere anche