Standardwertausdrücke: Erzeugen des Standardwerts
Ein Standardwertausdruck erzeugt den Standardwert für einen Typ. Es gibt zwei Arten von Standardwertausdrücken: den Aufruf des default-Operators und ein default-Literal.
Außerdem verwenden Sie das Schlüsselwort default
in einer switch
-Anweisung als case-Standardbezeichnung.
default-Operator
Das Argument für den default
-Operator muss der Name eines Typs oder Typparameters sein, wie das folgende Beispiel zeigt:
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.
default-Literal
Sie können das default
-Literal zum Erzeugen des Standardwerts eines Typs verwenden, wenn der Compiler den Ausdruckstyp ableiten kann. Der default
-Literalausdruck erzeugt den gleichen Wert wie der default(T)
-Ausdruck, wobei T
der abgeleitete Typ ist. Sie können das default
-Literal in den folgenden Fälle verwenden:
- Bei der Zuweisung oder Initialisierung einer Variablen.
- Bei der Deklaration des Standardwerts eines optionalen Methodenparameters
- Bei einem Methodenaufruf zum Bereitstellen eines Argumentwerts.
- In einer
return
-Anweisung oder als Ausdruck in einem Ausdruckskörpermember
Im folgenden Beispiel wird die Verwendung des default
-Literals veranschaulicht:
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) ]
Tipp
Verwenden Sie die .NET-Formatregel IDE0034, um eine Einstellung für die Verwendung des default
-Literals in Ihrer Codebasis anzugeben.
C#-Sprachspezifikation
Weitere Informationen finden Sie im Abschnitt Ausdrücke mit Standardwert der C#-Sprachspezifikation.