[英]Nullable datetime conversion error
我正在读取可能在其中或空格中具有未格式化日期的字段值,我需要将填充字段中的字符串转换为datetime并将其写回。 我正在尝试以下操作,但收到错误“可为空的对象必须具有值”:
DateTime? localVersion = null;
DateTime? serverVersion = null;
if(!string.IsNullOrWhiteSpace(item.cellValueLocal))
{
localVersion = DateTime.ParseExact(item.cellValueLocal, "ddMMyyyy", System.Globalization.CultureInfo.InvariantCulture);
}
if (!string.IsNullOrWhiteSpace(item.cellValueServer))
{
serverVersion = DateTime.ParseExact(item.cellValueServer, "ddMMyyyy", System.Globalization.CultureInfo.InvariantCulture);
}
localVersion.Value.ToString("dd.MM.yyyy", CultureInfo.InvariantCulture);
serverVersion.Value.ToString("dd.MM.yyyy", CultureInfo.InvariantCulture);
任何人都可以就这里可能出现的问题提供任何指导吗?
如果cellValue为null(或空白),则不会初始化DateTime实例,而仍将其设置为null
。 您不能在没有值的可为空的实例上访问.Value
。 您必须先使用.HasValue
进行检查:
if (localVersion.HasValue) {
localVersion.Value.ToString(...);
}
这些行:
localVersion.Value.ToString("dd.MM.yyyy", CultureInfo.InvariantCulture);
serverVersion.Value.ToString("dd.MM.yyyy", CultureInfo.InvariantCulture);
是错误。 如果item.cellValueLocal
或item.cellValueServer
为null或为空,那么localVersion.Value
和serverVersion.Value
将永远不会被分配非null值,因此Value
在您访问它时将引发异常。
您需要将操作替换为:
if (localVersion.HasValue)
localVersion.Value.ToString("dd.MM.yyyy", CultureInfo.InvariantCulture);
或者,您可以使用null合并运算符:
DateTime version = localVersion ?? DateTime.Now;
用适当的默认值替换DateTime.Now
。 在C#6中,您可以使用?.
语法以进一步简化为:
string version = localVersion?.ToString("dd.MM.yyyy", CultureInfo.InvariantCulture) ?? String.Empty;
哪个执行null检查内联。
如果要编译最新版本的c#(6.0)编译器,则可以将其进一步缩短为
localVersion?.ToString("dd.MM.yyyy", CultureInfo.InvariantCulture)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.