我一直在研究http://www.homeandlearn.co.uk/csharp/csharp_s3p9.html并编写了一个简单的循环乘法工具,并希望添加tryparse来阻止崩溃的崩溃。
但是,如果我使用以下代码将第一个框留空,我仍然会崩溃:
namespace WindowsFormsApplication4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int loopStart = int.Parse(textBox1.Text);
int loopEnd = int.Parse(textBox2.Text);
int multiply = int.Parse(textBox3.Text);
int answer = 0;
listBox1.Items.Clear();
int firstNum = 0;
bool isNumber = int.TryParse(textBox1.Text, out firstNum);
if (!isNumber)
{
MessageBox.Show("bah");
}
else
{
for (int i = loopStart; i <= loopEnd; i++)
{
answer = multiply * i;
listBox1.Items.Add(i + " times " + multiply +
" = " + answer.ToString());
}
}
}
}
}
任何人都可以帮忙解释原因吗?我查看了多个站点(bool代码略有不同的主要原因)但似乎无法使其工作。这是因为我将box1留空但输入数字到另外2。
我看到我已经投票了 - 我不确定为什么这是我第一次来这里,而且我是初学者 - 也许我的问题看起来很基本。我不是在抱怨,我在知道我做错了什么,因此我不会在将来重复这个错误,因为我确信我会回到这里几次。
感谢下面的回复,对我很有帮助。
答案 0 :(得分:2)
您没有使用TryParse
,而是在首次Parse
来电之前使用TryParse
方法抛出异常。请将Parse
来电更改为TryParse
然后检查每个结果。
int loopStart,loopEnd,multiply;
if(int.TryParse(textBox1.Text, out loopStart) &&
int.TryParse(textBox2.Text, out loopEnd)
int.TryParse(textBox3.Text, out multiply))
{
// parsing successfull
}
答案 1 :(得分:1)
正如大家所说,你在Parse
之前使用TryParse
,这就是为什么它会破裂。我不认为您了解TryParse
的作用。 TryParse
是一对二的捷径。这样做:
int loopStart = 0;
bool isLoopStartNumber = int.TryParse(textBox1.Text, out loopStart);
完全等同于:
int loopStart = 0;
bool isLoopStartNumber = false;
try {
loopStart = int.Parse(textBox1.Text);
isLoopStartNumber = true;
} catch {
isLoopStartNumber = false;
}
正如您所看到的,TryParse
为后者提供了一种更清洁,更简单的方法。两行代码与8行代码。此外,TryParse
禁止抛出实际异常,这使得它比后者更快。
答案 2 :(得分:0)
崩溃是因为您仍然在代码中使用Parse
来处理非int
的内容,如空白?
卸下:
int loopStart = int.Parse(textBox1.Text)
只需使用TryParse