哪些C#数据类型可以为可空类型?

时间:2010-05-14 12:59:31

标签: c# nullable

有人可以给我一个列表,还是指向我可以找到可以为可空类型的C#数据类型的列表?

例如:

  • 我知道Nullable<int>没问题
  • 我知道Nullable<byte[]>不是。

我想知道哪些类型可以为空,哪些类型不可以。顺便说一下,我知道我可以在运行时测试它。但是,这是我们正在编写的代码生成器,所以我没有实际的类型。我只知道列是stringint32(等)。

3 个答案:

答案 0 :(得分:20)

所有值类型(Nullable<T>本身除外)都可以在可空类型中使用 - 即从System.ValueType派生的所有类型(也包括enum s!)。

原因是Nullable声明如下:

struct Nullable<T> where T : struct, new() { … }

答案 1 :(得分:2)

如果一个类型可以被赋值或者可以被赋值为null,则该类型被认为是可空的,这意味着该类型没有任何价值。因此,可空类型可以表示值,或者不存在值。例如,诸如String之类的引用类型是可空的,而诸如Int32之类的值类型则不是。值类型不能为空,因为它具有足够的容量来仅表达适合该类型的值;它没有表达null值所需的额外容量。

Nullable结构仅支持使用值类型作为可空类型,因为引用类型可以通过设计为空。

Nullable类为Nullable结构提供了补充支持。 Nullable类支持获取可空类型的基础类型,以及对可为空的类型对进行比较和相等操作,其基础值类型不支持通用比较和相等操作。

来自帮助文档 http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx

答案 2 :(得分:1)

它可以是任何值类型,包括struct,它不能是引用类型,因为它们本身已经可以为空。

是: INT32 双 约会时间 CustomStruct 等

没有: 串 排列 CustomClass 等

有关详细信息,请参阅MSDN:http://msdn.microsoft.com/en-us/library/2cf62fcy(v=VS.80).aspx