繁体   English   中英

错误消息为“字符串未被识别为有效的DateTime。”

[英]Error Message as “String was not recognized as a valid DateTime.”

我的代码:

DateTime? birthDate = DateTime.Parse(filterDictionary.ContainsKey("DOB") ? filterDictionary["DOB"] : string.Empty);

我收到错误消息,因为“字符串未被识别为有效的DateTime。” 如何解决这个问题。 谢谢。

问题(至少其中一个)是您无法将空字符串解析为DateTime

将您的代码行更改为此,以仅在找到密钥时才移动解析,并在没有密钥时返回null而不是解析:

DateTime? birthDate = filterDictionary.ContainsKey("DOB") ? DateTime.Parse( filterDictionary["DOB"]) : (DateTime?) null;

另一个问题可能是您的字典DOB值实际上无法转换为DateTime 如果以上代码不起作用,请在filterDictionary["DOB"]此错误时编辑您的问题,并将值发布到filterDictionary["DOB"]

当您使用空字符串显示DateTime.Parse时,它总是会失败。

目前尚不清楚,你已经看到了这个时间是否已经一个地方出现字典中的数据,但它是无效的,或者是否存在一直没有数据,它的解析string.Empty 还请注意, DateTime.Parse返回DateTime ,而不返回DateTime? 如果您想在条目不在字典中的情况下将该值设置为null那么我实际上会使用:

DateTime? birthDate = null;
string dobText;
if (filterDictionary.TryGetValue("DOB", out dobText))
{
    birthDate = DateTime.Parse(dobText);
}

也许:

string dobText;
DateTime? birthDay = filterDictionary.TryGetValue("DOB", out dobText)
    ? DateTime.Parse(dobText) : (DateTime?) null;

请注意,您需要在此处将第二或第三操作数中的至少一个强制转换为null ,以便编译器可以计算条件表达式的类型。

您还应该考虑对DateTime.Parse的普通调用是否合适:

  • 如果知道所需的特定格式,请致电DateTime.ParseExact
  • 如果这是用户输入 ,则可能应该使用TryParseTryParseExact
  • 如果不是用户输入,则可能应该指定CultureInfo.InvariantCulture的解析CultureInfo.InvariantCulture
  • 如果它是用户在GUI中的直接输入,是否有一种方法可以避免首先将其作为文本获得?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM