如果我从值类型声明一个可空(通过Nullable或?符号)变量,它是否仍然遵循值类型的规则(即默认情况下传递值,当它超出范围时解除分配,而不是垃圾收集器运行)或它变成引用类型,因为它实际上是Nullable类型?
答案 0 :(得分:7)
文档在这里:
http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx
正如您所看到的,文档将其描述为“可空结构”,表明它是值类型。此外,文档给出了类型声明的第一行:
public struct Nullable<T> where T : struct, new()
再次显示该类型是值类型。
答案 1 :(得分:3)
是的,System.Nullable是一个通用的Struct,即值类型。
答案 2 :(得分:1)
Nullable值类型本质上只是一个值类型的结构包装器,它允许将它们标记为null。
类似的东西:
struct Nullable<T>
{
public T Value;
public bool HasValue;
}
我相信它实际上比引擎盖下更复杂,编译器会为你做很多好事,所以你可以编写例如if(myInt == null)
。但是,是的,它们仍然是价值类型。