相关疑难解决方法(0)

为什么Nullable <T>是一个结构?

我想知道为什么它Nullable<T>是一个值类型,如果它被设计为模仿引用类型的行为?我理解GC压力之类的东西,但我不相信 - 如果我们想要int表现得像参考,我们可能会对所有具有真实参考类型的后果感到满意.我没有理由Nullable<T>不仅仅是盒装版本的Tstruct.

作为价值类型:

  1. 它仍然需要装箱和取消装箱,而且,拳击必须与"普通"结构有点不同(将零值无效视为真实null)
  2. 检查null时需要区别对待(简单地完成Equals,没有真正的问题)
  3. 它是可变的,打破了结构应该是不可变的规则(好吧,它在逻辑上是不可变的)
  4. 它需要有特殊的限制来禁止递归 Nullable<Nullable<T>>

不制作Nullable<T>参考类型可以解决这个问题吗?

改写和更新:

我已经修改了我的理由列表,但我的一般问题仍然是开放的:

引用类型如何Nullable<T>比当前值类型实现更糟糕?这只是GC压力和"小的,不可改变的"规则吗?它对我来说仍然很奇怪......

c# clr nullable

24
推荐指数
3
解决办法
2824
查看次数

Nullable <T>与类似的自定义C#结构有何不同?

Nullable微优化(第一部分)中,Eric提到了Nullable<T>一种奇怪的拳击行为,这种行为无法通过类似的用户定义类型实现.

C#语言赋予预定义Nullable<T>类型的特殊功能有哪些?特别是那些无法在某种MyNullable类型上工作的.

当然,Nullable<T>有特殊的语法糖T?,但我的问题更多是关于语义.

c# language-features boxing nullable

4
推荐指数
1
解决办法
335
查看次数

标签 统计

c# ×2

nullable ×2

boxing ×1

clr ×1

language-features ×1