C# 错误消息为";字符串未被识别为有效的日期时间。”;
我的代码:C# 错误消息为";字符串未被识别为有效的日期时间。”;,c#,asp.net,string,datetime,C#,Asp.net,String,Datetime,我的代码: DateTime? birthDate = DateTime.Parse(filterDictionary.ContainsKey("DOB") ? filterDictionary["DOB"] : string.Empty); 我收到的错误消息是“字符串未被识别为有效的日期时间”。如何解决此问题。谢谢。问题是(至少有一个)无法将空字符串解析为日期时间 将代码行更改为此,以便仅在找到密钥时移动解析,并在没有密钥时返回null而不是解析: DateTime? birthDate =
DateTime? birthDate = DateTime.Parse(filterDictionary.ContainsKey("DOB") ? filterDictionary["DOB"] : string.Empty);
我收到的错误消息是“字符串未被识别为有效的日期时间”。如何解决此问题。谢谢。问题是(至少有一个)无法将空字符串解析为日期时间
将代码行更改为此,以便仅在找到密钥时移动解析,并在没有密钥时返回null而不是解析:
DateTime? birthDate = filterDictionary.ContainsKey("DOB") ? DateTime.Parse( filterDictionary["DOB"]) : (DateTime?) null;
另一个问题可能是您的字典DOB值实际上无法转换为日期时间。如果上述代码不起作用,请编辑您的问题,并在出现此错误时在filterDictionary[“DOB”]
中发布值。问题(至少其中一个)是无法将空字符串解析为DateTime
将代码行更改为此,以便仅在找到密钥时移动解析,并在没有密钥时返回null而不是解析:
DateTime? birthDate = filterDictionary.ContainsKey("DOB") ? DateTime.Parse( filterDictionary["DOB"]) : (DateTime?) null;
另一个问题可能是您的字典DOB值实际上无法转换为日期时间。如果上述代码不起作用,请编辑您的问题,并在出现此错误时在filterDictionary[“DOB”]
中发布该值。好的DateTime。当您使用空字符串呈现时,解析总是会失败
现在还不清楚您看到这段时间是字典中有数据但无效,还是没有数据并且正在解析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
- 如果这是用户输入,您可能应该使用
TryParse
或TryParseExact
- 如果不是用户输入,您可能应该指定
CultureInfo.InvariantCulture
- 如果它是GUI中的直接用户输入,有没有一种方法可以首先避免将其作为文本
好的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
- 如果这是用户输入,您可能应该使用
TryParse
或TryParseExact
- 如果不是用户输入,您可能应该指定
CultureInfo.InvariantCulture
- 如果它是GUI中的直接用户输入,有没有一种方法可以首先避免将其作为文本
无法确定条件表达式的类型,因为未显示“System.DateTime”和“msg”之间的隐式转换。谢谢。@SOUser:看到我的答案了吗?您需要将一个或另一个操作数强制转换为DateTime?
谢谢Jon,我现在更新了我的答案以反映这一变化。@yvindKnobloch Brå然后,更新的答案按预期运行良好。非常感谢。无法确定条件表达式的类型,因为未显示“System.DateTime”和“msg”之间的隐式转换。谢谢。@SOUser:看到我的答案了吗?您需要将一个或另一个操作数强制转换为DateTime?
谢谢Jon,我现在更新了我的答案以反映这一变化。@yvindKnobloch Brå然后,更新的答案按预期运行良好。非常感谢。TryGetValue未填充。它询问您是否缺少命名空间。我把“system.Data.Common”放在这里。问题也出现了。Thanks@SOUser:我假设filterDictionary
是一本字典
-不是吗?(和以往一样,利用部分信息很难。)非常感谢。我从oyvind那里得到了你更正后的最新答案。它工作得很好。谢谢。@SOUser:这是不是意味着你忽略了我文章中的其他几点?不要只是做第一件事情,立即为你使用的确切数据-停止并考虑更广泛的问题。当然。我肯定会尝试其他选择。我不会忽视。非常感谢。TryGetValue未填充。它询问您是否缺少命名空间。我把“system.Data.Common”放在这里。问题也出现了。Thanks@SOUser:我假设filterDictionary
是一本字典
-不是吗?(和以往一样,利用部分信息很难。)非常感谢。我从oyvind那里得到了你更正后的最新答案。它工作得很好。谢谢。@SOUser:这是不是意味着你忽略了我文章中的其他几点?不要只是做第一件事情,立即为你使用的确切数据-停止并考虑更广泛的问题。当然。我肯定会尝试其他选择。我不会忽视。非常感谢你。