我使用tryparse,但仍然崩溃

时间:2014-05-09 22:55:13

标签: c# tryparse

我一直在研究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。

我看到我已经投票了 - 我不确定为什么这是我第一次来这里,而且我是初学者 - 也许我的问题看起来很基本。我不是在抱怨,我在知道我做错了什么,因此我不会在将来重复这个错误,因为我确信我会回到这里几次。

感谢下面的回复,对我很有帮助。

3 个答案:

答案 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

即可