首页 > 解决方案 > 使用不可为空参数的复合空值检查

问题描述

我一直在查看一些 MS 参考资料以备即将到来的考试,并发现了一个我不同意答案的所谓以前的问题。

经过考虑,我将发布问题的屏幕截图,而不是浓缩问题,以防万一我抽象出手头问题的任何相关信息。

在此处输入图像描述

我遇到的问题是他们给出的答案是 B,而我认为它应该是 A,原因如下。

LINQ 查询中的 where 子句有两个条件,它必须与 DateTime 中年份匹配的一个条件进行比较?对象和方法参数。

但是,我更感兴趣的是为什么他们认为由于参数类型是不可为空的 int 而需要进行空检查。在按值传递参数之前取消分配和尝试分配 null 将导致编译器错误。

如果 year 参数永远不能为 null,则永远不会有 null DateTime 匹配 - 使 null 检查变得多余。

我明白为什么 B 也会产生预期的结果,但回答 A有什么问题吗?

(我读过的 Ps -将不可为空的 `int` 与 `null` (LINQ)进行比较,这似乎支持了我的理论,我只是对不同意参考资料感到不安)

标签: c#linqparameter-passingnullable

解决方案


假设您选择 A ,如果 Date 为空,您将得到以下异常

Nullable object must have a value.
  + System.ThrowHelper.ThrowInvalidOperationException(System.ExceptionResource)
  + Nullable<T>.get_Value()

例如

DateTime? dt = null;
 if (dt.Value.Year == 2010) Console.WriteLine("Accepted Value");

给出错误


推荐阅读