【问题标题】:Null check value types passed via parameters通过参数传递的空检查值类型
【发布时间】:2016-12-04 08:55:40
【问题描述】:

考虑到值类型在默认情况下总是初始化并且永远不会为空,是否值得对通过参数传递给方法的值类型进行空检查?

例如是否值得进行以下检查

public void Method(Guid x)
{
  if (x == null)
   throw new ArgumentNullException();
...
}

【问题讨论】:

  • 您无法将值类型与 null 进行比较。你会得到一个编译器错误。您可以做的是将其与default(Guid) 进行比较。这是一个类似的检查,但default(type) 通常也是一个有效值(例如default(int) 是 0),所以你需要小心。
  • 对永远不会为空的东西进行空检查有什么意义?这背后还有其他问题吗?
  • @itsme86:有趣的是,无论如何,对于Guids,您不会收到编译器错误。
  • @sstan 查看这个问题以获得解释:stackoverflow.com/questions/2177850/…
  • @itsme86,这将编译得很好。希望编译器足够聪明,可以在发布模式下折腾代码,但是检查 guid 是否等于 null 并没有错。 (它总是错误的)

标签: c# .net value-type


【解决方案1】:

虽然条件在技术上是有效(由于运算符重载规则和可为空的类型),但它只能评估为false。这就是为什么在某些情况下,您会收到编译器警告,让您知道唯一可能的结果是false

因此,除非您的问题有更多,否则归结为询问这段代码是否值得:

public void Method(Guid x)
{
  if (false)
   throw new ArgumentNullException();
...
}

答案应该很明显了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 2014-02-05
    • 2021-11-19
    相关资源
    最近更新 更多