我想不出怎样才能让试捕器开始工作。在文本框中输入非数字时,需要有一个错误消息框弹出。
private void btnAdd_Click(object sender, EventArgs e)
{
int x = int.Parse(txtIn1.Text);
int y = int.Parse(txtIn2.Text);
txtIn1.Text = x.ToString();
txtIn2.Text = y.ToString();
lstOut.Items.Add((x + y).ToString("N0"));
try
{
int.Parse(txtIn1.Text);
int.Parse(txtIn2.Text);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}发布于 2017-10-13 18:20:11
只需进行最少的修改:将所有代码移到try中,这样当任何异常被击中时,它都会捕获。在try块之外遇到异常。只有在相应的try块中发生了抛出异常时,才会看到捕获被触发。
private void btnAdd_Click(object sender, EventArgs e) {
try {
int x = int.Parse(txtIn1.Text);
int y = int.Parse(txtIn2.Text);
txtIn1.Text = x.ToString();
txtIn2.Text = y.ToString();
lstOut.Items.Add((x + y).ToString("N0"));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
}编辑:正如评论者所建议的那样,我认为这个答案是不完整的,没有说明在这种情况下,Try/Catch块是过火的。
一种更好的方法是使用内置的TryParse方法(它可以返回一个关于解析尝试成功的布尔值和一个输出值)。以下是您实现这一目标的一种方法:
private void btnAdd_Click(object sender, EventArgs e) {
var xSuccess = int.TryParse(txtIn1.Text, out int x);
var ySuccess = int.TryParse(txtIn2.Text, out int y);
if(!xSuccess)
MessageBox.Show($"{x} could not be parsed to int!");
if(!ySuccess)
MessageBox.Show($"{y} could not be parsed to int!");
if(xSuccess && ySuccess)
lstOut.Items.Add((x + y).ToString("N0"));
}发布于 2017-10-13 18:30:13
您不应该像在this SO post中解释的那样,使用try-catch作为控制块。为此请使用if。尝试捕捉实际上是指当您不能进行其他操作时,或者当没有预料到发生时,才使用它。
可以使用this SO post作为示例,您的代码可以如下所示
private void btnAdd_Click(object sender, EventArgs e)
{
int x;
int y;
if(!int.TryParse(txtIn1.Text, out x) || !int.TryParse(txtIn2.Text, out y))
MessageBox.Show("Parse failed !");
}您可以使用
Console.WriteLine(x);
Console.WriteLine(y);来验证vars是否正确地被赋予了一个值。
有关int.TryParse()方法与int.Parse()的更多信息,请参见this post。
发布于 2017-10-13 18:31:10
正如其他人所提到的,这是第一个int.Parse()函数,在Try/Catch块之外。
我想对TryParse()函数进行扩展--以及为什么应该使用它。
异常是昂贵的--就时间/CPU/等等而言,它们是相当大的开销。它们也不适合用户使用。您想对用户说“请输入一个有效的号码”,而不是“发生了异常:.”
相反,您可以使用TryParse,它返回解析是否有效;解析的输出是输入列表中的"out“参数:
int myValue;
bool parseWorked = int.TryParse("3", out myValue);这没有异常开销--无论输入是否有效,它都会快速运行。
https://stackoverflow.com/questions/46735854
复制相似问题