using System;
public class C {
public void Main() {
int j1=5;
int? j=7;
}
}
以下是初始化j1
和j
的IL代码
IL_0000: nop
IL_0001: ldc.i4.5
IL_0002: stloc.0
IL_0003: ldloca.s 1
IL_0005: ldc.i4.7
IL_0006: call instance void valuetype [System.Runtime]System.Nullable`1<int32>::.ctor(!0)
从IL中我可以看到,当我使用Int32时,不会调用任何构造函数,但当我使用Nullable时,会调用一个构造函数,以便将值放入变量中.
为什么会这样?
我只能想象这是因为Nullable类型必须能够为Null,但在内部 struct 中既可以是非Null类型,也可以是Null类型.那么为什么Int32没有构造函数呢?
所有这一切都考虑到了Jon Skeet的答案,即当可为空的int32为空时,它不会指向任何地方,但它本身就是空的. ? (nullable) operator in C#个