注意:
这不是重复的。 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
谢谢!
答案 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
可以将其显式定义为可为空的类型FirstClass
(class
可为可引用类型)。另一个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
的工作方式。