0

我的代码:

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

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

4

2 回答 2

2

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

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

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

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

于 2012-10-19T06:12:04.300 回答
1

当你用一个空字符串呈现它时,DateTime.Parse总是会失败。

不清楚你看到这个的时间是字典中有数据但它是无效的,还是没有数据并且它正在解析string.Empty。还要注意DateTime.Parsereturns 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
  • 如果它是 GUI 中的直接用户输入,有没有办法可以避免一开始就将其作为文本获取?
于 2012-10-19T06:14:12.877 回答