das*_*dot 50 .net c# design-patterns
我需要检查一个DateTime
值是否有值.
我有几个选择:
if (dateTime == default(DateTime))
Run Code Online (Sandbox Code Playgroud)
要么
if (dateTime == DateTime.MinValue)
Run Code Online (Sandbox Code Playgroud)
或使用可空的 DateTime?
if (nullableDateTime.HasValue)
Run Code Online (Sandbox Code Playgroud)
我个人更喜欢第三个版本,因为它的可读性非常好.但是在我们的数据库中,我们有一些datetime列,它们被定义为非null.所以在某些情况下我必须选择前两个选项.
我在某处读到了在default
使用泛型时应该使用该关键字,但在这种情况下它是否更具可读性?当使用第二个选项时,我必须知道新的和空的DateTime实例的默认值是DateTime.MinValue,它具有我的实现细节的气味.
那么我应该使用哪个选项来使用"最佳实践"?
Jon*_*eet 54
我可能会说这个非常明确:
// Or private, or maybe even public
internal static readonly DateTime MagicValueForNullDateTimeInNonNullableColumns
= DateTime.MinValue;
Run Code Online (Sandbox Code Playgroud)
好吧,所以我的名字稍微不那么罗嗦了,但你明白我的意思.如何初始化该值并不重要 - 很明显您正在尝试做什么.
(当然,在任何时候都可以使用可空类型.我假设问题被问到,因为在某些情况下你不能这样做.)
Luk*_*keH 18
我需要检查一个
DateTime
值是否有值.
你已经非常多地描述了需要的教科书情况Nullable<DateTime>
.我会选择那个选项.
(如果你需要将值保存到非空的db列,你显然需要某种转换层,但我会尽量保持任何"魔法"值尽可能接近db,并尽量保持你的C#代码干净且惯用.)
"最佳"做法是使用可空的DateTime
.由于不信任"魔术"数字的原因,创建了可以为空的值类型.
这种方法最重要的是它的意图 - 在你的上下文中具有"默认"日期/时间意味着什么?