传递“new int?()”作为参数

时间:2017-08-29 15:12:32

标签: c#

我在看一个函数:

public void foo(int? id) {
...
}

调用如:

foo(new int?());

这里发生了什么?传递 new int?()时函数内 id 的值是多少?它不会出现成为任何东西 - 该函数将它用于SQL存储过程,我可以在跟踪中看到它被传递为null。我希望用一个确定的实际整数来调用这个存储过程,我想知道为什么这段代码可能没有指定一个,除非有一些我不理解的东西。

3 个答案:

答案 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