gpt4 book ai didi

c# - 从没有错误的字符串中解析日期时间

转载 作者:行者123 更新时间:2023-11-30 19:47:26 26 4
gpt4 key购买 nike

我是 C# 的新手,所以这很可能有一个相当简单的解决方案,但我还没有找到任何我认为优雅的东西。如果您需要任何其他信息或对我的问题有任何疑问,请告诉我,我会尽快回复您。

目前创建验证规则的方式(当有人提交表单时),像这样:

new ValidationRuleInstance<DetailsPresenter>(
new IsValidDateRule<DetailsPresenter>(m => m.StartDate, "StartDate"),
new ValidationRuleInterpretation(Severity.Failure, "StartDateMustBeValid", "Must enter valid start date (dd/mm/yyyy)")
),

我试图做的是创建一个验证规则来检查我提供的日期是否发生在过去。我累的是这个:

new ValidationRuleInstance<DetailsPresenter>(
new FailIfTrueRule<DetailsPresenter>(m => (DateTime.Parse(m.StartDate).AddDays(1) < DateTime.Now) ,"StartDate"),
new ValidationRuleInterpretation(Severity.Failure, "StartDateCannotBeInThePast", "Your start date cannot be in the past")
),

这是行得通的...大多数时候(附言,我添加了一天,这样输入当前日期就不会产生错误)。

问题是,如果有人提交了一个无法解析为日期时间对象的字符串(例如,725/2011 而不是 7/25/2011),整个事情就会崩溃。

我尝试过使用 TryParse,但是返回的是 Boolean 而不是 Time-Date 对象。

我是否必须编写自己的方法来解析 String 并始终返回 DateTime 对象?我可以捕获异常并忽略它吗? (已经有一个单独的规则来检查字符串是否有效)

最佳答案

没有理由不能在 lambda 中使用多行代码块。您只需将代码括在方括号中并发出显式 return 语句,而不是仅指定隐式返回其值的单个表达式。

new ValidationRuleInstance<DetailsPresenter>(
new FailIfTrueRule<DetailsPresenter>(m =>
{
DateTime value;

if(DateTime.TryParse(m.StartDate, out value))
{
return value.AddDays(1) < DateTime.Now;
}
else // parsing failed, return whatever value is appropriate
{

}
} ,"StartDate"),
new ValidationRuleInterpretation(Severity.Failure, "StartDateCannotBeInThePast", "Your start date cannot be in the past")
),

关于c# - 从没有错误的字符串中解析日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6818026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com