格式化可为空的日期时间

问题描述 投票:0回答:1

这是我的职责:

private static string strTimeStampMsg(string strMsg, DateTime? dtTimestamp = null) {
    if (strMsg == null || strMsg.Length == 0) {
        return string.Empty;
    }
    string strDateTime;
    if (dtTimestamp != null) {
        strDateTime = dtTimestamp.ToString(CSTR.dtFormat);
    } else {
        strDateTime = DateTime.Now.ToString(CSTR.dtFormat);
    }
    return strDateTime + "> " + strMsg;
}

CSTR.dtFormat 在 DLL 中定义:

public const string dtFormat = "dd-MM-yyyy HH:mm:ss.fff";

今天我添加了可选的,问题是行:

strDateTime = dtTimestamp.ToString(CSTR.dtFormat);

ToString 下有红色下划线,为什么以及如何解决,同时能够使用所需的格式进行格式化?

c# datetime
1个回答
2
投票

ToString 下有红色下划线,为什么以及如何解决,同时能够使用所需的格式进行格式化?

好吧,您可以使用

dtTimestamp.Value.ToString(...)
,这样您就可以尝试调用
DateTime.ToString
而不是
Nullable<DateTime>.ToString()

请注意,这并不是真正来自可选参数的值 - 它是一个

Nullable<DateTime>
而不是
DateTime
。如果您从其他地方获得了
Nullable<DateTime>
值,而不使用可选参数,您仍然会面临同样的问题。

但是有一个更好的解决方案可以避免代码重复:

string strDateTime = (dtTimestamp ?? DateTime.Now).ToString(CSTR.dtFormat);

使用空合并运算符 -

??
- 有效地使用
DateTime.Now
作为默认值。

我认为这是更干净的代码,因为它清楚地表明显式提供 DateTime 值和使用默认值之间的

唯一
区别在于格式化的部分 - 无论哪种方式,你都可以对结果执行相同的操作。在您当前的代码中,两个分支都对所选的
DateTime
执行操作,虽然它们是相同的 现在,但它们很容易最终不一致。

© www.soinside.com 2019 - 2024. All rights reserved.