这是我的职责:
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 下有红色下划线,为什么以及如何解决,同时能够使用所需的格式进行格式化?
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
执行操作,虽然它们是相同的 现在,但它们很容易最终不一致。