C# 空强制转换和默认对象之间有什么区别

C# 空强制转换和默认对象之间有什么区别,c#,null-pointer,C#,Null Pointer,我想知道这段代码之间的区别是什么: (Person)null 这个密码呢 default(Person) 我想是一样的。我也一样。细微差别是什么?default()返回类型的默认值。对于引用类型,即null。 例如,对于值为0的int,以及例如,对于日期时间,它是0001-01-01 00:00。有关其他类型的默认值,请参见 因此,default()的行为因类型而异 null的(Person)null强制转换只会给您一个null的Person对象。 我不知道你什么时候想用这个。在变量声明中,

我想知道这段代码之间的区别是什么:

(Person)null
这个密码呢

default(Person)
我想是一样的。我也一样。细微差别是什么?

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

因此,
default()
的行为因类型而异

null的
(Person)null
强制转换只会给您一个null的Person对象。 我不知道你什么时候想用这个。在变量声明中,不需要:

Person p = (Person)null;

Person p = null;
事实上,使用

var p = (Person)null;


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

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

int x = default(int);//will be assigned to 0
将与int x相同

对于类型未定义的泛型对象,我们可以使用默认值为对象指定特定值。让我们看看这个例子:

public T GetDefault<T>()
{
return default(T);
} 
public T GetDefault()
{
返回默认值(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
int defx=this.GetDefault()//将分配0
char defy=this.GetDefault();//将分配null(“\0”)
object defz=this.GetDefault();//将分配空值
因此,我们可以使用default关键字很容易地获得对象的默认分配


另一方面,(Person)null强制转换为null,只会给你一个Person null对象

如果你需要初始化变量,那就不一样了:)我会更准确地使用这个术语。“复杂类型”指的是“引用类型”。“例如,
int
”是指“对于值类型,例如,
int
”。链接到默认值也可能会有所帮助。
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