【问题标题】:What is the difference between a null cast and default object空转换和默认对象有什么区别
【发布时间】:2019-02-08 11:24:26
【问题描述】:

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

(Person)null

还有这段代码

default(Person)

我认为是一样的。它对我的作用相同。有什么细微差别?

【问题讨论】:

    标签: c# null-pointer


    【解决方案1】:

    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 也可能会有所帮助。
    【解决方案2】:

    在使用通用对象时,有时默认关键字会非常方便。对象未初始化时返回默认值。例如,我们都知道如果没有给定任何值,整数将被初始化为 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 对象

    【讨论】:

      猜你喜欢
      • 2021-10-11
      • 2014-08-10
      • 1970-01-01
      • 2014-02-19
      • 2014-07-04
      • 2019-02-04
      • 2020-10-28
      • 1970-01-01
      • 2011-09-23
      相关资源
      最近更新 更多