图片 2

1中default关键字的新用法,defualt关键字默认值用法

default 关键字有两类用法

默认值表达式生成类型的默认值。 默认值表达式在泛型类和泛型方法中非常有用。 使用泛型类和泛型方法时出现的一个问题是,如何在无法提前知道以下内容的情况下将默认值赋值给参数化类型 T

  1. switch语句中指定默认标签
  2. 默认值表达式
  • T 是引用类型还是值类型。
  • 如果 T 是值类型,它是数值还是用户定义的结构。

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;
      }

已知参数化类型 T 的变量 t,仅当 T 为引用类型时,语句 t = null 才有效。 赋值 t = 0 仅对数值类型有效,对结构无效。 解决方案是使用默认值表达式,该表达式对引用类型(类类型和接口类型)返回 null,对数值类型返回零。 对于用户定义的结构,返回初始化为零位模式的结构,该结构根据成员是值还是引用类型,为每个成员生成
0 或 null。 对于可为 NULL
的值类型,default 返回像任何结构一样初始化的System.Nullable<T>。

默认值表达式

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

default(T) 表达式不限于泛型类和泛型方法。 默认值表达式可用于任何托管类型

默认文本和类型推理

C# 7.1 default的使用常见举例
Visual Studio 2017 默认C#语言版本是7.0,需要自己设置7.1
Alt+Enter快捷键打开项目属性,或者右键点击项目,选择属性,之后选择生成,点击高级,如下图
图片 1

打开高级生成设置,选择语言版本,选C# 7.1 及以上的版本,如下图
图片 2

如果没有C# 7.1 及以上的版本可选,请下载.NET Framework
4.7.2,现在最新版本的是4.7.2,直接下载最新版本的,省事。然后重启VS,就能看到7.1及以上的可选项。

以上内容来自MSDN。

变量初始值设定项

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;

示例代码:

发表评论

电子邮件地址不会被公开。 必填项已用*标注