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

哪些C#数据类型可以是可空类型?,c#,nullable,C#,Nullable,有人能给我一个列表,或者告诉我在哪里可以找到可以为空类型的C#数据类型列表吗 例如: 我知道Nullable可以 我知道可为空不是 我想知道哪些类型是可空的,哪些不是。顺便说一句,我知道我可以在运行时进行测试。然而,这是我们正在编写的代码生成器,所以我没有实际的类型。我只知道一个列是string或int32(等等)。所有值类型(除了Nullable本身)都可以用在可为null的类型中–即从System.ValueType派生的所有类型(也包括enums!) 原因是声明如下: struct N

有人能给我一个列表,或者告诉我在哪里可以找到可以为空类型的C#数据类型列表吗

例如:

  • 我知道
    Nullable
    可以
  • 我知道
    可为空
    不是
我想知道哪些类型是可空的,哪些不是。顺便说一句,我知道我可以在运行时进行测试。然而,这是我们正在编写的代码生成器,所以我没有实际的类型。我只知道一个列是
string
int32
(等等)。

所有值类型(除了
Nullable
本身)都可以用在可为null的类型中–即从
System.ValueType
派生的所有类型(也包括
enum
s!)

原因是声明如下:

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

它可以是任何值类型,包括struct,但不能是引用类型,因为这些类型本身就可以为null

是的: Int32 双重的 日期时间 自定义结构 等等

否: 一串 排列 定制类 等等


有关更多信息,请参见MSDN:

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

可为null的结构支持仅使用值类型作为可为null的类型,因为引用类型在设计上是可为null的

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

来自帮助文档
任何数据类型都可以为空。 Nullable适用于您,因为普通int不可为null,因此有必要将其转换为Nullable int

Nullable不起作用,因为int[]已经是可为null的类型

Nullable不支持已经为Nullable的类型

请注意,仅当类型尚未为可空类型时,才需要将其转换为可空类型

值类型不可为null,值类型为int、float、double、long等,以及您创建的结构

例如,引用类型已经可以为空(例如类)

你能用这个吗?运算符使该类型成为可为null的类型。 请注意,即使不是一种好的做法,如果您将问号运算符用于已可为null的类型,也不会产生错误

int? myNullableVar = null;
int[]? MyNullableArr = null; //not necessary but does not raise an error

@OP:…因为问题的关键是解决值类型不可为null的问题(我称之为主要设计缺陷;其他人不同意)。()他们称之为
Nullable
,这肯定不会有任何帮助!因为和你的问题“什么类型可以为null?”完全一样,答案是:引用类型可以为null。值类型与可为空的
兼容,反之亦然。叹息;-)@TJCrowder:我不同意……次要的挑剔:除了可空类型本身以外的所有值类型。即以下内容无效:var i=new Nullable()@兰迪·明德:不可能有完整的类型列表,因为C#有一个可扩展的类型系统。每个人都可以编写自己的值类型。使用这样的列表将不可避免地导致代码有缺陷,难以维护。此外,如果代码生成器是用.NET编写的,您甚至可以在运行时在代码生成器中进行测试。@Randy Minder:没有完整的列表;用户可以自由定义新的值类型。您可以通过检查
System.type.IsValueType
Nullable
不正常来测试类型是否为值类型,因为数组是引用类型(即使它们包含的类型是值类型)。请注意,这意味着您可以执行
byte[]b=null
“它可以是任何值类型,包括struct”-好的,除了50%的可用结构是
可为null的
;P