C#Nullable变量是否仍然可以作为值类型?

时间:2010-01-03 03:20:49

标签: c# nullable

如果我从值类型声明一个可空(通过Nullable或?符号)变量,它是否仍然遵循值类型的规则(即默认情况下传递值,当它超出范围时解除分配,而不是垃圾收集器运行)或它变成引用类型,因为它实际上是Nullable类型?

3 个答案:

答案 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)。但是,是的,它们仍然是价值类型。