c# - 使用不可为空参数的复合空值检查
问题描述
我一直在查看一些 MS 参考资料以备即将到来的考试,并发现了一个我不同意答案的所谓以前的问题。
经过考虑,我将发布问题的屏幕截图,而不是浓缩问题,以防万一我抽象出手头问题的任何相关信息。
我遇到的问题是他们给出的答案是 B,而我认为它应该是 A,原因如下。
LINQ 查询中的 where 子句有两个条件,它必须与 DateTime 中年份匹配的一个条件进行比较?对象和方法参数。
但是,我更感兴趣的是为什么他们认为由于参数类型是不可为空的 int 而需要进行空检查。在按值传递参数之前取消分配和尝试分配 null 将导致编译器错误。
如果 year 参数永远不能为 null,则永远不会有 null DateTime 匹配 - 使 null 检查变得多余。
我明白为什么 B 也会产生预期的结果,但回答 A有什么问题吗?
(我读过的 Ps -将不可为空的 `int` 与 `null` (LINQ)进行比较,这似乎支持了我的理论,我只是对不同意参考资料感到不安)
解决方案
假设您选择 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");
给出错误
推荐阅读
- python - Python loadarff 对字符串属性失败
- c++ - STM32 Switch Case影响操作
- javascript - 将 div img 更改为另一个中的活动图像
- android - 使用 Retrofit 将文件数组上传到服务器
- azure-devops - 在运行时添加其他映射以获取源(Azure DevOps 管道 - TFVC)
- oracle - 在 Oracle 中使用触发器将列值设置为等于另一列
- python - 如何在包含 NA 的行中对 pandas 数据框进行分组并为组分配索引?
- java - java中双冒号(::)操作符的Python等价物
- spring-batch - Spring batch - 将远程分区与远程分块相结合
- c++ - 如何在 Windows 上为 Visual Studio Code 安装 vckpg?