我试图通过一些验证做一个表单但是我遇到了DateTime
这是我的Person.cs
private string dateBirth;
public string DateBirth
{
get { return dateBirth; }
set
{
if (string.IsNullOrEmpty(value) == true)
{
throw new ArgumentException("Date is empty");
}
else if (value.GetType() != typeof(DateTime))
{
throw new ArgumentException("Invalid date");
}
else
{
dateBirth = value;
}
}
这是我的MainWindow.xaml
private void btnSet_Click(object sender, RoutedEventArgs e)
{
Person p = new Person();
try
{
p.DateBirth = txtDate.Text; //this is the textbox I want to check
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
如果我在我的textbox
日期中插入例如01/01/1990,它始终是一个无效的日期',作为第二个ArgumentException
。
由于
答案 0 :(得分:0)
因为它是一个字符串...你必须将它解析为DateTime并检查它是否成功。
答案 1 :(得分:0)
这是合理的,因为txtDate.Text
的类型是字符串。您必须先解析用户的输入。基本上,我不会使用try catch块。我会尝试以下方法:
if(!DateTime.TryParse(txtDate.Text, out p.DateBirth))
{
// The parse failed.
MessageBox.Show("Invalid date");
}
如果您使用此方法,请不要
因为DateTime.TryParse(String,DateTime)方法试图解析 使用格式设置的日期和时间的字符串表示形式 当前文化的规则,试图解析一个特定的字符串 跨越不同的文化可能会失败或返回不同的结果。 如果将跨不同的方式解析特定的日期和时间格式 locales,使用DateTime.TryParse(String,IFormatProvider, DateTimeStyles,DateTime)方法或其中一个重载 TryParseExact方法并提供格式说明符。
有关此问题的详细信息,请查看here。
答案 2 :(得分:0)
您的属性是字符串类型属性
public string DateBirth
你在setter中获得的值也总是一个字符串
else if (value.GetType() != typeof(DateTime))
使用DateTime.TryParse将字符串转换回Date first
答案 3 :(得分:0)
DateTime.TryParseExact(..)函数允许您使用特定日期格式解析日期(例如," mm / dd / yyyy")。但是,如果您希望对年份中的位数保持灵活性,那么正则表达式可能是更好的选择。
if (!DateTime.TryParseExact(txtDate.Text, out value))
{
return false;
}