我想知道这段代码有什么区别:
(Person)null
此代码
default(Person)
我认为也是一样。对我来说也一样。有什么细微差别?
答案 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的对象