espressioni di valore predefinito: produrre il valore predefinito
Un'espressione con valore predefinito produce il valore predefinito per un tipo . Esistono due tipi di espressioni valore predefinite: l'operatore predefinito chiamata e un valore letterale predefinito .
È anche possibile usare la parola chiave default
come etichetta case predefinita all'interno di switch
un'istruzione.
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 valore letterale default
per produrre il valore predefinito di un tipo quando il compilatore è in grado di dedurre il tipo di espressione. L'espressione letterale default
produce lo stesso valore dell'espressione default(T)
in cui T
è il tipo derivato. È possibile usare il valore letterale default
in uno dei seguenti casi:
- Nell'assegnazione o nell'inizializzazione di una variabile.
- Nella dichiarazione del valore predefinito per un parametro di metodo facoltativo.
- In una chiamata al metodo per fornire un valore di argomento.
- In un
return
'istruzione o come espressione in un membro con corpo di espressione.
L'esempio seguente illustra l'utilizzo del valore letterale 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) ]
Suggerimento
Usare la regola di stile .NET IDE0034 per specificare una preferenza per l'uso del default
valore letterale nella codebase.
Specifiche del linguaggio C#
Per altre informazioni, vedere la sezione Espressioni con valore predefinito della specifica del linguaggio C#.