使用is关键字检查nullable是否不为null

问题描述 投票:0回答:1

我刚刚发现,可以在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# .net .net-core
1个回答
2
投票

任何编译/反编译回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);
}

因此,编译器在前面使用了可空类型的语法糖来在后台创建优化的方案。

© www.soinside.com 2019 - 2024. All rights reserved.