我在看一个函数:
public void foo(int? id) {
...
}
调用如:
foo(new int?());
这里发生了什么?传递 new int?()时函数内 id 的值是多少?它不会出现成为任何东西 - 该函数将它用于SQL存储过程,我可以在跟踪中看到它被传递为null。我希望用一个确定的实际整数来调用这个存储过程,我想知道为什么这段代码可能没有指定一个,除非有一些我不理解的东西。
答案 0 :(得分:3)
因为任何Nullable<T>
类型的默认值为null
。
请参阅:What is the default value of the nullable type "int?" (including question mark)?
int?
是Nullable<int>
答案 1 :(得分:2)
int?
是Nullable<int>
的简写,所以:
new int?()
实际上正在传递null
。
答案 2 :(得分:2)
当函数传递给new int时,函数内部的值是多少?()?
new int?()
是nullable int类型的无参数构造函数的调用。如果您未传递任何值,则它将具有默认值null
。还有第二个构造函数可以将int
个数作为参数并初始化new int?(23)
如果您想详细了解构造函数的工作方式,请查看source code