如何调试此错误";输入字符串的格式不正确;
本文关键字:输入 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
}
注意:文本框控件应用于获取文本输入。对于日期时间输入,将控件更改为日期时间选择器。您不必进行任何解析。