利用.Net我继承了一个较旧的类,它将DateTime和bool参数作为其构造函数的一部分。这些值是从SQL数据库中提取的,在SQL数据库中,这些值可以为null。当我填充我的类并调用基础构造函数时,这会失败,因为DateTime和bool在.Net中不能有空值。
我知道Nullable类型(DateTime?等),我可以定义我的自定义类来使用它们并保存空值但是我无法想出一种方法将空值转换为值具有DateTime的旧类可以接受。
我讨厌这个想法但是,我想使用aa属性将null转换为虚拟日期然后再返回但是没有办法确定谁调用属性所以我不知道何时提供null或者从get获得一个虚拟日期。
任何想法都将不胜感激。
答案 0 :(得分:3)
如果你不能使用DateTime,我们通常会使用DateTime.MinValue来做这类事情吗?在较旧的代码中。
答案 1 :(得分:1)
您可以使用null coalescing operator来使用“当前值,如果缺少则使用默认值”。如另一个答案所述,默认日期将是DateTime.MinValue
private static readonly DateTime DefaultDate = ...;
...
DateTime? optionalDate = ...;
DateTime date = optionalDate ?? DefaultDate;
答案 2 :(得分:0)
具有日期时间的旧类可以接受任何日期时间,因此任何值都可以工作...(但我建议使用其他人建议的DateTime.MinValue。)
您可能更关心(正确)关注的是当实例具有表示其中的null的“magic”值时,使用旧类实例的客户端代码将如何运行。
旧款是否密封?如果没有,您是否可以使用其他bool DateTimeIsDefined属性创建一个新的派生类,并在未设置标志时以适当的方式运行相应的代码(表示DateTime未定义?如果旧的clas将其方法声明为虚拟,您可以使用这个将DateTimeIsDefined属性考虑在内的新实现在dervied类中覆盖它们...并且传递旧类实例的客户端仍将执行较旧的实现,而客户端传递较新类的实例将执行新的。