C#中的整数引用类型是什么?

我想要一个整数变量,可以设置为null并且不想使用int? myVariable int? myVariable语法。 我尝试使用intInt16无济于事。 我必须使用int? myVariable int? myVariable

我之所以提到这一点是因为在Java中既有’int’类型(基元)和’Integer’(引用类型)。 我想确保没有我可以使用的内置整数引用类型。 我会用’int?’ 因为我在做什么。

对于info, int? / Nullable 不是引用类型; 它只是一个“可空类型”,意思是:一个struct(本质上是int和一个bool标志),带有特殊的编译器规则(re null检查,运算符等)和CLI规则(用于装箱/拆箱)。 .NET中没有“整数引用类型”,除非你计算装箱:

 int i = 123; object o = i; // box 

但这会产生一个不必要的对象,并且有很多相关的其他问题。

对于你想要的, int? 应该是理想的。 你可以使用长手语法( Nullable ),但IMO这是不必要的冗长,我看到它混淆了人们。

是的,你应该使用可空类型

见Nullable

 Nullable Nullable 

或简单地说

 int? float? 

PS:

如果你不想使用 符号或Nullable – 只需使用特殊结构就可以了。 例如DataTable :

 var table = new DataTable(); table.Columns.Add('intCol',typeof(int)); var row = table.NewRow(); row['intCol'] = null; // 

可空类型是System.Nullable(T)结构的实例。
因此int,int?,Nullable 都是类型,而不是引用类型

是的,这是唯一的方法,因为Int32 / Int16 / int是一种原始类型(无论这些是装箱/拆箱)。

您将不得不使用可空类型,即:

 Nullable or int? 

可空类型的目的是,使您能够为值类型赋值null。

来自MSDN:

可空类型解决了您希望能够具有空(或未知)值的基本类型的场景。 这在数据库场景中很常见,但在其他情况下也很有用。

在过去,有几种方法可以做到这一点:

  1. 盒装值类型。 这在编译时不是强类型的,并且涉及为每种类型执行堆分配。
  2. 值类型的类包装器。 这是强类型的,但仍然涉及堆分配,您必须编写包装器。
  3. 一个支持可空性概念的结构包装器。 这是一个很好的解决方案,但你必须自己编写。

如果你讨厌,你可以使用System.Nullable ? 非常。

是。 这就是微软加入的原因。 人们正在创建自己的Nullable类,因此他们将这种模式包含在.NET中。

? 语法使其可以为空。 如果你深入挖掘一下,你会发现它只是一个被使用的通用对象。

如果你想像C ++那样做,你必须使用不安全的操作。 然后,像C中的指针可用,但您的代码不符合CLR …

对于使用没有指针的纯.NET,? 是要走的路。