【发布时间】:2019-02-08 11:24:26
【问题描述】:
我想知道这段代码有什么区别:
(Person)null
还有这段代码
default(Person)
我认为是一样的。它对我的作用相同。有什么细微差别?
【问题讨论】:
标签: c# null-pointer
我想知道这段代码有什么区别:
(Person)null
还有这段代码
default(Person)
我认为是一样的。它对我的作用相同。有什么细微差别?
【问题讨论】:
标签: c# null-pointer
default() 返回类型的默认值。对于引用类型,即null。
例如int 是值 0,例如日期时间,它是0001-01-01 00:00。请参阅docs 了解其他类型默认值。
所以default() 的行为因类型而异。
(Person)null 转换为 null,只为您提供一个为 null 的 person 对象。
我不知道你什么时候想要使用它。在变量声明中,没有必要:
Person p = (Person)null;
与
相同Person p = null;
其实可以用
var p = (Person)null;
和
var p = default(Person);
【讨论】:
int' 你的意思是'对于值类型,例如int'。为default 链接到the docs 也可能会有所帮助。
在使用通用对象时,有时默认关键字会非常方便。对象未初始化时返回默认值。例如,我们都知道如果没有给定任何值,整数将被初始化为 0。字符未赋值时为空,对象未赋值时为空。
这些值是根据默认关键字分配的。 因此,如果我们写:
int x = default(int);//will be assigned to 0
将与 int x 相同;
对于未定义类型的通用对象,我们可以使用默认值来为对象分配特定的值。让我们看一下示例:
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 的 (Person)null 强制转换,只是给你一个 person null 对象
【讨论】: