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 :
- Dans l'affectation ou l'initialisation d'une variable.
- Dans la déclaration de la valeur par défaut d’un paramètre de méthode facultatif.
- Dans un appel de méthode pour fournir une valeur d'argument.
- Dans une instruction
return
ou en tant qu’expression d’un membre expression-bodied.
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#.