如果输入无效日期,则向用户提供错误

时间:2017-03-29 19:35:32

标签: c# visual-studio-2013 try-catch

作为我第一次编程任务的一部分,我们需要创建一个程序,告诉用户他们几天的年龄,我已经完成了,但是我们需要使用try / catch。我们从来没有被教过任何关于它们的基本概念,比如类/变量/数组。这是我需要添加内容的代码,只需告诉用户DateTime对象DateOfBirth在文本框中是否无效并再次启动,目前无效的DOB只会导致程序崩溃。这是计算所有内容的代码。

private void buttonDaysOld_Click(object sender, EventArgs e)
{
    DateTime DateOfBirth = new DateTime((int)comboBoxYear.SelectedItem, comboBoxMonth.SelectedIndex + 1, (int)comboBoxDay.SelectedItem);
    TimeSpan diff = DateTime.Now - DateOfBirth;
    int AgeInDays = (int)diff.TotalDays;
    MessageBox.Show(textBoxName.Text+" you are "+(AgeInDays.ToString())+ " Days Old");
}

2 个答案:

答案 0 :(得分:2)

当您尝试将组合框值转换为let splitAt value lst = let rec loop l1 = function | [] -> List.rev l1, [] | h :: t when h > value -> List.rev l1, (h :: t) | h :: t -> loop (h :: l1) t loop [] lst let groupByListMaxes listMaxes numbers = let rec loop acc lst = function | [] -> List.rev acc | h :: t -> let out, lst' = splitAt h lst loop (out :: acc) lst' t loop [] numbers listMaxes 时,我猜测您的应用程序崩溃的错误是InvalidCastException。所以你需要做的就是用try catch包围你的代码,并在catch部分做你需要的。

int

请注意,您应该检查您获得的确切错误并将其放入catch(your_error)。

你可以随时提出:

try {

    DateTime DateOfBirth = new DateTime((int)comboBoxYear.SelectedItem, comboBoxMonth.SelectedIndex + 1, (int)comboBoxDay.SelectedItem);
    TimeSpan diff = DateTime.Now - DateOfBirth;
    int AgeInDays = (int)diff.TotalDays;
    MessageBox.Show(textBoxName.Text + " you are " + (AgeInDays.ToString()) + " Days Old");
}
catch (InvalidCastException)
{
    MessageBox.Show("Wrong Format");
}

哪个会捕获所有异常,但不建议您这样做,有关于该主题here的帖子。

如果您要获得需要处理的多个例外,那么就会有一个很好的question about that来解释如何处理它。您可以通过阅读documentation here.

了解有关try-catch及其工作原理的更多信息

答案 1 :(得分:0)

如果您希望在您的程序中验证出生日期,那么代码应该像这样:

private void buttonDaysOld_Click(object sender, EventArgs e)
{
    DateTime DateOfBirth;
    try
    {
        DateOfBirth = new DateTime((int)comboBoxYear.SelectedItem, comboBoxMonth.SelectedIndex + 1, (int)comboBoxDay.SelectedItem);
    }
    catch (Exception exception)
    {
        MessageBox.Show(exception.Message);
        return;
    }
    TimeSpan diff = DateTime.Now - DateOfBirth;
    int AgeInDays = (int)diff.TotalDays;
    MessageBox.Show(textBoxName.Text + " you are " + (AgeInDays.ToString()) + " Days Old");
}

如果您想成为合格的软件开发人员,我建议您:

1)熟悉Exception机制,这是处理应用程序中错误(异常情况)的非常方便的方法: https://msdn.microsoft.com/en-us/library/ms173160.aspx

2)您可以使用特殊控件 - DatePicker - 来选择DateTime值。