espressioni di valore predefinito (riferimenti per C#)default value expressions (C# reference)

Un'espressione valore predefinita produce il valore predefinito di un tipo.A default value expression produces the default value of a type. Esistono due tipi di espressioni valore predefinite: la chiamata dell'operatore predefinito e un valore letterale predefinito.There are two kinds of default value expressions: the default operator call and a default literal.

Si usa anche la parola default chiave come etichetta case predefinita all'interno di un'istruzione . switch You also use the default keyword as the default case label within a switch statement.

operatore defaultdefault operator

L'argomento dell'operatore default deve essere il nome o il parametro di un tipo, come illustrato nell'esempio seguente:The argument to the default operator must be the name of a type or a type parameter, as the following example shows:

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 predefinitodefault literal

A partire da C# 7.1, è possibile usare il valore letterale default per produrre il valore predefinito di un tipo quando il compilatore è in grado di dedurre il tipo di espressione.Beginning with C# 7.1, you can use the default literal to produce the default value of a type when the compiler can infer the expression type. L'espressione letterale default produce lo stesso valore dell'espressione default(T) in cui T è il tipo derivato.The default literal expression produces the same value as the default(T) expression where T is the inferred type. È possibile usare il valore letterale default in uno dei seguenti casi:You can use the default literal in any of the following cases:

L'esempio seguente illustra l'utilizzo del valore letterale default:The following example shows the usage of the 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) ]

Specifiche del linguaggio C#C# language specification

Per altre informazioni, vedere la sezione Espressioni con valore predefinito della specifica del linguaggio C#.For more information, see the Default value expressions section of the C# language specification.

Per altre informazioni sul valore letterale default, vedere la nota relativa alla proposta di funzionalità.For more information about the default literal, see the feature proposal note.

Vedi ancheSee also