为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我可以将 null 分配给“struct Nullable<T>”类型的值而不是我的结构?

为什么我可以将 null 分配给“struct Nullable<T>”类型的值而不是我的结构?

C#
泛舟湖上清波郎朗 2021-06-02 18:54:25
我知道可空值类型的机制。但是,我对以下内容感兴趣:Nullable 值类型正在使用结构(来自https://referencesource.microsoft.com/#mscorlib/system/nullable.cs,ffebe438fd9cbf0e)public struct Nullable<T> where T : struct {    public Nullable(T value) {        /* ... */    }    public bool HasValue {get;}    public T Value {get;}}我可以像这样使用Nullable<int> i = null;现在,我以同样的方式创建自己的 Nullable-Struct:public struct MyNullable<T> where T : struct {    public MyNullable(T value) {        /* ... */    }    public bool HasValue {get;}    public T Value {get;}}为什么我做不到MyNullable<int> i = null;现在?我知道,struct 的值不能为 null - 但是为什么 struct Nullable 的值可以为 null?允许这样做的机制在哪里?
查看完整描述

1 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

允许这样做的机制在哪里?

在 C# 编译器本身中。Nullable<T>是一种具有许多额外规则的特殊类型,包括如何null处理(比较和赋值)以及如何处理运算符(请参阅:“提升运算符”)。

还有就是支持在运行时进行Nullable<T>,特别“拳击”的规则。

您无法Nullable<T>在自己的代码中进行模拟,因为这些特殊规则是您无法表达的。


查看完整回答
反对 回复 2021-06-05
  • 1 回答
  • 0 关注
  • 129 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信