C# 7.1中default关键字的新用法

default 关键字有两类用法

  1. switch语句中指定默认标签
  2. 默认值表达式

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# 编程指南)

作者:repeatedly

出处:https://www.cnblogs.com/AlienXu/p/9494676.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   repeatedly  阅读(7172)  评论(2编辑  收藏  举报
编辑推荐:
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
阅读排行:
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?
· RFID实践——.NET IoT程序读取高频RFID卡/标签
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示