空类型转换和默认对象之间有什么区别

时间:2019-02-08 11:24:26

标签: c# null-pointer

我想知道这段代码有什么区别:

(Person)null

此代码

default(Person)

我认为也是一样。对我来说也一样。有什么细微差别?

2 个答案:

答案 0 :(得分:7)

default()返回该类型的默认值。对于引用类型,即null。 例如int的值是0,例如日期时间为0001-01-01 00:00。有关其他类型的默认设置,请参见docs

default()的行为因类型而异。

(Person)null为null的强制转换,只会为您提供一个null对象。 我不知道您何时要使用它。在变量声明中,没有必要:

Person p = (Person)null;

相同
Person p = null;

实际上可以使用

var p = (Person)null;

var p = default(Person);

答案 1 :(得分:0)

有时,使用通用对象时,默认关键字非常方便。未初始化对象时,它将返回默认值。例如,我们都知道,如果没有给出任何值,则整数将初始化为0。如果不赋予任何值,则字符为空;如果不赋予任何值,则对象为null。

这些值是根据默认关键字分配的。 因此,如果我们写:

int x = default(int);//will be assigned to 0

将与int x相同;

如果泛型对象的类型未定义,则可以使用default为该对象分配特定的值。让我们看一下示例:

public T GetDefault<T>()
{
return default(T);
} 

该函数为发送的每种单独类型返回默认值。因此

int defx = this.GetDefault<int>(); //will assign 0
char defy = this.GetDefault<char>(); // will assign null('\0')
object defz = this.GetDefault<object>(); // will assign null

因此,我们可以使用default关键字很容易地获得对象的默认分配。

另一方面,(人)为null的强制类型转换,只会为您提供人为null的对象