说我有这样的构造函数:
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做什么验证?
答案 0 :(得分:1)
decimal
和System.DateTime
都是值类型。这意味着(除非您将其声明为可空 - decimal?
或DateTime?
),否则它们不能具有null
值。
因此,检查它们是否为null
是没有意义的,因为它们不能具有null
值。同样,在构造函数或方法参数中为这些数据类型传递null
毫无意义。
至于是否使它们可以为空而且使用逻辑默认值(例如
DateTime.MaxValue
或decimal.MinValue
)是您需要自己设计的选择。
至于为什么编译器在DateTime
检查null
时没有抱怨,我无法确切地说 - 这听起来像编译器错误。但由于大多数开发人员不习惯检查null
的值类型,因此不是主要原因。