如何调试此错误";输入字符串的格式不正确;

本文关键字:输入 quot 字符串 不正确 格式 错误 何调试 调试 | 更新日期: 2023-09-27 18:26:34

这是代码

    private void btngetage_Click(object sender, EventArgs e)
    {
        try
        {
            string a = txtAge.Text;
            DateTime bday = new DateTime(int.Parse(txtbday.Text));
            DateTime today = DateTime.Today;
            int age = today.Year - bday.Year;
            if (bday > today.AddYears(-age))
                age--;
            txtAge.Text = age.ToString();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

如何调试此错误";输入字符串的格式不正确;

当你做这样的事情时,

catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

你让调试变得更加困难。现在,调试器根本不会停止,而不是在包含错误的行上停止。它只会显示您的消息框并继续前进,因为您已经处理了错误。

不要使用catch块,除非用于捕获您期望并将要处理的异常。因此,永远不要捕获基Exception类,因为它有很多子类,您永远无法处理(如OutOfMemoryException)。始终捕获特定的派生异常。

或者根本不要发现任何异常。如果需要,可以使用全局未处理的异常处理程序。默认情况下,它将显示一个包含异常信息的警报。(这与上面的代码基本上是一样的,只是要好得多。)

一旦你去掉了那个毫无价值的catch块,调试器就会停在这一行:

DateTime bday = new DateTime(int.Parse(txtbday.Text));

它会告诉你int.Parse方法正在抛出一个异常,以及它是哪种类型的异常。你会发现输入(txtbday.Text)不是一个有效的整数,因此无法转换为整数。

您可以通过捕获FormatException并处理错误来解决这个问题,但没有理由这样做,因为提供了一个不会抛出任何异常的TryParse方法。相反,它返回一个表示成功或失败的bool。用if语句测试它。如果无法解析字符串,请使用ErrorProvider组件提醒用户输入的字符串存在问题。

您试图在此处解析一个无效整数:

int.Parse(txtbday.Text)

试着用这个代替

DateTime.Parse(txtbday.Text)

为了防止异常,最好使用DateTime.TryParse方法:

DateTime bday;
if (DateTime.TryParse(txtbday.Text, out bday))
{
    int age = today.Year - bday.Year;
    if (bday > today.AddYears(-age))
        age--;
    txtAge.Text = age.ToString();
}

而不是此

DateTime bday = new DateTime(int.Parse(txtbday.Text));

你应该这样做,尽管这是我从你的问题中所能得到的全部。

DateTime bday;
if(DateTime.TryParse(txtbday.Text.Trim(),out bday))
{
    //your rest of code
}

注意:文本框控件应用于获取文本输入。对于日期时间输入,将控件更改为日期时间选择器。您不必进行任何解析。