【发布时间】:2018-02-02 17:40:08
【问题描述】:
假设我有一个这样的构造函数:
public MyClass(DateTime dateOfBirth, decimal cost)
{
DateOfBirth = dateOfBirth;
Cost = cost;
}
我需要添加一些验证。我需要检查这些变量是否为空吗?
1) 如果我尝试这样做是为了成本,那么会有一个编译器警告说小数永远不会为空:
if(cost==null) { }
2) 如果我尝试为 dateOfBirth 执行此操作,则没有问题:
if(dateOfBirth==null) { }
3) 如果我尝试为 dateOfBirth 执行此操作,则会出现两个编译器错误(每个变量一个):
MyClass mc = new MyClass(null, null);
为什么在我测试 DateTime null 时没有编译器错误,而当我将 null 传递给需要 DateTime 的方法时,为什么没有编译器错误?我需要在这里对 null 做哪些验证?
【问题讨论】:
-
@Win 我认为问题更多是关于为什么
DateTimeValueType没有像ValueTypes 这样的ValueTypes 在检查 null 时出现的编译器警告。 -
@Jonathon Chase,谢谢。这就是我的意思。你能回答吗?
-
@w0051977 像 ReSharper(以及扩展名为 Rider)这样的工具将根据具体情况将针对 null 的不可为空类型的检查标记为始终为真或始终为假。我不确定为什么编译器警告是针对某些结构而不是其他结构实现的。
-
@Jonathon Chase,我想在构造函数中检查 null 是没有意义的?