簡體   English   中英

使用 is 關鍵字檢查可空對象是否為空

[英]Use of the is keyword to check if a nullable is not null

我剛剛發現,可以在 C# 中使用is-keyword對可空結構進行空檢查。 我認為它看起來很干凈並且很好理解,但它也有性能嗎? 口譯員是否必須雙重投射它或者這樣可以嗎?

    static void Main(string[] args)
    {
        DateTime? test = null;

        PrintDT(test);//wont print
        test = DateTime.Now;
        PrintDT(test);//will print
    }
    private static void PrintDT(DateTime? dt)
    {
        if (dt is DateTime a)
            Console.WriteLine(a);
    }

任何編譯/反編譯回 C# 的工具都會給出等效的方法(發布模式編譯):

private static void PrintDT(DateTime? dt)
{
    if (dt.HasValue)
    {
        DateTime valueOrDefault = dt.GetValueOrDefault();
        Console.WriteLine(valueOrDefault);
    }
}

或(調試模式編譯)

private static void PrintDT(DateTime? dt)
{
  DateTime valueOrDefault;
  int num;
  if (dt.HasValue)
  {
    valueOrDefault = dt.GetValueOrDefault();
    num = 1;
  }
  else
    num = 0;
  if (num == 0)
    return;
  Console.WriteLine((object) valueOrDefault);
}

因此,編譯器預先使用可空類型的語法糖來在幕后創建優化的場景。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM