默认值表达式生成类型的 默认值 。 有两种类型的默认值表达式: 默认运算符 调用和 默认文本。
还可以使用default
关键字作为语句中的switch
默认事例标签。
default 运算符
default
运算符的实参必须是类型或类型形参的名称,如以下示例所示:
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
文本生成类型的默认值。 文本default
表达式生成与推断类型的表达式T
相同的值default(T)
。 可以在以下任一情况下使用 default
文本:
- 在变量的赋值或初始化中。
- 在 可选方法参数的默认值声明中。
- 在方法调用中,提供参数值。
-
return
在语句中,或作为表达式体成员中的表达式。
以下示例显示了文本的 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) ]
小窍门
使用 .NET 样式规则 IDE0034 指定代码库中文本的使用 default
首选项。