【发布时间】:2011-07-25 23:00:47
【问题描述】:
我是 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,但是它返回一个布尔值而不是时间-日期对象。
我是否必须编写自己的方法来解析字符串并始终返回 DateTime 对象?我可以捕获异常并忽略它吗? (已经有一个单独的规则来检查字符串是否有效)
【问题讨论】:
-
TryParse 确实返回了一个 DateTime 对象,它是作为输出参数的第二个参数。您的用途如MSDN DateTime 所述。它就像 DateTime.TryParse("7/25/2011", out date)
-
只是一个评论:你可以使用
.AddDays(1) < DateTime.Now,而不是< DateTime.Today