代码之家  ›  专栏  ›  技术社区  ›  Michael Haddad

null和(type)null有什么区别?

  •  4
  • Michael Haddad  · 技术社区  · 7 年前

    注: 这不是复制品。 This question 当问到为什么有可能抛出一个空值时,我的问题是它们之间的区别是什么 null (type)null 首先。


    this 参考(来自MSDN C#参考),据说此代码:

    expression as type 
    

    expression 变量只计算一次“):

    expression is type ? (type)expression : (type)null  
    

    这让我想知道,零投有什么意义?这与:

    expression is type ? (type)expression : null  
    

    谢谢!

    2 回复  |  直到 7 年前
        1
  •  4
  •   Chrᴉz remembers Monica    7 年前

    请看这个示例项目:

    static void Main(string[] args)
    {
        //Error: The call is ambigious between the following methods or properties: ShowMessage(FirstClass), ShowMessage(SecondClass)
        ShowMessage(null);
        //Here it is known which type is being used
        ShowMessage((FirstClass)null);
    }
    
    private static void ShowMessage(FirstClass value)
    {
        System.Console.WriteLine(value);
    }
    
    private static void ShowMessage(SecondClass value)
    {
        System.Console.WriteLine(value.ToString());
    }
    
    class FirstClass { }
    class SecondClass { }
    

    因此, null (FirstClass)null (头等舱)空 FirstClass ( class 可作为引用类型为null)的。其他的 无效的 只是。。。好 无效的 必须隐式转换为所需的可为null的类型。

    当心:

    ShowMessage(NotFirstClassObj as FirstClass)
    

    具有

    ShowMessage(NotFirstClassObj is Firstclass ? (FirstClass)NotFirstClassObj : null)
    

    它仍然可以工作,因为编译器仍然可以派生正确的类型。但这可能就是为什么 (type)null

        2
  •  1
  •   Igor    7 年前

    The code is equivalent to 关键字being equivalent expression as type 但是为什么要提到所有可能的功能等价性呢?


    两者有什么区别 null (type)null

    这种情况没有区别。它们等同于同一件事。作者 选择使用 因为它更清楚地传达了 as