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

时间:2018-09-07 10:31:18

标签: c# casting null

注意: 这不是重复的。 This question问为什么甚至可以强制转换为空,我的问题是null(type)null首先有什么区别。


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

expression as type 

等效于此代码(“除了expression变量仅被评估一次”):

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

让我感到奇怪的是,null强制转换的意义是什么?与以下内容有何不同?

expression is type ? (type)expression : null  

谢谢!

2 个答案:

答案 0 :(得分:4)

看这个示例项目:

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)null可以将其显式定义为可为空的类型FirstClassclass可为可引用类型)。另一个null就好了……null,必须隐式转换为所需的可为null的类型。

当心: 如果您要更换

ShowMessage(NotFirstClassObj as FirstClass)

使用

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

它仍然有效,因为编译器仍可以派生正确的类型。但这可能就是纪录片中(type)null的原因。

答案 1 :(得分:1)

文档指出The code is equivalent to关键字为equivalent。您可以删除强制类型转换,其结果与expression as type相同,但是为什么要提及所有可能的功能对等?


  

null(type)null开头有什么区别

在这种情况下没有区别。他们等同于同一件事。作者可能选择使用(type)null是因为它更清楚地传达了as的工作方式。