【问题标题】:Passing "new int?()" as Parameter [duplicate]将“new int?()”作为参数传递[重复]
【发布时间】:2018-02-07 02:54:15
【问题描述】:

我在看一个函数:

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

像这样称呼:

foo(new int?());

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

【问题讨论】:

  • int? 是一个可为空的整数。您基本上是将null 传递给您的函数,并想知道为什么它不是数字。如果你想传递一个数字,你为什么不呢?
  • 该过程如何处理该值?将其插入表中?
  • @Amy 好吧,我说“可能” - 我的假设基于“我正在查看一个函数”之类的提示和问题的整体措辞。但我承认,我可能是错的。
  • int?Nullable<int> 的语法糖。结构类型,使用新表达式来初始化结构,它是标准 C# 语法。大多数程序员更喜欢foo(null); 以保持他们的代码可读性。
  • @Amy 没错——这不是我的代码。

标签: c#


【解决方案1】:

因为任何Nullable<T> 类型的默认值都是null

见:What is the default value of the nullable type "int?" (including question mark)?

int?Nullable<int> 的快捷方式/语法糖

【讨论】:

    【解决方案2】:

    传入new int时,函数内部的id值是多少?()?

    new int?() 是可空 int 类型的无参数构造函数的调用。如果您没有在其中传递任何值,它将具有默认值null。还有第二个构造函数,它可以将int 数字作为参数并对其进行初始化new int?(23)

    如果您想详细了解构造函数的工作原理,请查看source code

    【讨论】:

      【解决方案3】:

      int?Nullable<int> 的简写,所以:

      new int?()

      实际上是通过null

      【讨论】:

        猜你喜欢
        • 2021-12-14
        • 2019-04-20
        • 2013-08-13
        • 2020-12-20
        • 2011-04-30
        • 2021-09-24
        • 2019-07-23
        • 2011-04-07
        相关资源
        最近更新 更多