我想知道是否有人知道 C# 编译器如何处理以下分配:
int? myInt = null;
我的假设是执行了隐式转换,但我无法弄清楚如何处理空文字赋值。我反汇编了 System.Nullable 对象,发现隐式运算符被覆盖为:
public static implicit operator T?(T value) {
return new T?(value);
}
一旦被调用,它将尝试触发辅助构造函数:
public Nullable(T value) {
this.value = value;
this.hasValue = true;
}
这就是我的困惑发挥作用的地方...... this.value 是某种值类型,不能为空。
那么,有谁知道这种“魔术”是如何发生的......或者我假设调用了辅助构造函数是错误的?是否调用了默认构造函数,因为编译器知道它无法将第二个构造函数的签名与 null 文字匹配(导致 myInt 被分配给新的“null”Nullable)?