1. 程式人生 > 實用技巧 >C# 7.1中default關鍵字的新用法

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 的值型別 預設返回Nullable<T>,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# 程式設計指南)

********轉載:https://www.cnblogs.com/AlienXu/archive/2018/08/17/9494676.html