default 关键字有两类用法
- switch语句中指定默认标签
- 默认值表达式
switch 语句#
int caseSwitch = 1; switch (caseSwitch) { case 1: Console.WriteLine("Case 1"); break; case 2: Console.WriteLine("Case 2"); break; default: Console.WriteLine("Default case"); break; }
默认值表达式#
default对应各种类型生成默认值列表如下: |类型|默认值| |-|-| |任何引用类型|null
| |数值类型|零| |bool|false
| |enum|表达式 (E)0
生成的值,其中 E
是枚举标识符。| |struct|通过如下设置生成的值:将所有值类型的字段设置为其默认值,将所有引用类型的字段设置为null
。| |可以为 null 的类型|HasValue 属性为 false
且 Value 属性未定义的实例。|
罗列一下上述列表中的常见类型对应的值
在C# 7.1 之前
default(string) // null default(int) // 0 default(int?) // null default(dynamic) // null default(DateTime) // 0001/01/01 0:00:00 default(DateTime?) // null
默认文本和类型推理#
C# 7.1 default的使用常见举例 Visual Studio 2017 默认C#语言版本是7.0,需要自己设置7.1 Alt+Enter快捷键打开项目属性,或者右键点击项目,选择属性,之后选择生成,点击高级,如下图
打开高级生成设置,选择语言版本,选C# 7.1 及以上的版本,如下图
如果没有C# 7.1 及以上的版本可选,请下载.NET Framework 4.7.2,现在最新版本的是4.7.2,直接下载最新版本的,省事。然后重启VS,就能看到7.1及以上的可选项。
变量初始值设定项#
7.1之前:
var dstring = default(string); var dint = default(int); var dintNull = default(int?); var d = default(dynamic); var dt = default(DateTime); var dt1 = default(DateTime?);
7.1:
string s = default; int i = default; DateTime? dt = default; dynamic d = default;
变量赋值#
7.1之前:
var s = "字符串"; s = default(string);
7.1:
var s = "字符串"; s = default;
声明可选参数的默认值#
7.1之前:
void Test(int a, string b = null) { }
7.1:
void Test(int a, string b = default) { }
为方法调用参数提供值#
7.1之前:
static void Test(int a, string b) { } static void Main(string[] args) { Test(0, null); }
7.1:
static void Test(int a, string b) { } static void Main(string[] args) { Test(default, default); }
返回语句#
7.1之前:
static string Test() { return null; }
7.1:
static string Test() { return default; }
expression bodied 成员中的表达式#
7.1之前:
public string A => null;
7.1:
public string A => default;
参考:默认值表达式(C# 编程指南)