expressions de valeur par défaut : produire la valeur par défaut

Une expression de valeur par défaut produit la valeur par défaut d’un type . Il existe deux types d’expressions de valeur par défaut : l’appel de l’opérateur par défaut et un littéral par défaut.

Vous utilisez également le mot-clé default comme étiquette case par défaut dans une instruction switch.

Opérateur default

L’argument de l’opérateur default doit avoir le nom d’un type ou d’un paramètre de type, comme le montre l’exemple suivant :

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.

littéral par défaut

À partir de C# 7.1, vous pouvez utiliser le littéral default pour produire la valeur par défaut d’un type lorsque le compilateur peut déduire le type d’expression. L’expression littérale default génère la même valeur que l’expression default(T), où T est le type déduit. Vous pouvez utiliser le littéral default dans les cas suivants :

L’exemple suivant illustre l’utilisation du littéral 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) ]

Conseil

Utilisez la règle de style .NET IDE0034 pour spécifier une préférence sur l’utilisation du littéral default dans votre codebase.

spécification du langage C#

Pour plus d’informations, voir la section Expressions de valeur par défaut de la spécification du langage C#.

Voir aussi