Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我正在使用tryparse,但仍然会崩溃_C#_Tryparse - Fatal编程技术网

C# 我正在使用tryparse,但仍然会崩溃

C# 我正在使用tryparse,但仍然会崩溃,c#,tryparse,C#,Tryparse,我一直在研究并编写一个简单的循环乘法工具,并希望添加tryparse以阻止空白崩溃 但是,如果我使用以下代码将第一个框留空,仍然会发生崩溃: namespace WindowsFormsApplication4 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private voi

我一直在研究并编写一个简单的循环乘法工具,并希望添加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());
                }
            }
        }
    }
}
命名空间窗口窗体应用程序4
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
私有无效按钮1\u单击(对象发送者,事件参数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);
如果(!isNumber)
{
MessageBox.Show(“呸”);
}
其他的
{

对于(int i=loopStart;i您没有使用
TryParse
,您在第一个引发异常的
TryParse
调用之前使用了
Parse
方法。将
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
}

它崩溃是因为您仍然在代码中使用
Parse
,而不是
int
,比如blank

删除:

int loopStart = int.Parse(textBox1.Text)

只需使用
TryParse

正如大家所说,您在
TryParse
之前使用了
Parse
,这就是它被破坏的原因。我认为您不理解
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
抑制抛出实际异常,这使它比后者更快。

非常好-这似乎阻止了崩溃。我不太明白为什么。我理解我t的意思是如果它返回一个真实的数字,该怎么办,但是我不明白它是怎么说的“如果没有一个有效的数字,什么都不做(即,不要失败)”,我希望我不是太挑剔,但它不是完全等价的。它在功能上是等价的。TryParse方法实际上从不抛出异常。这使它的速度大大加快(而且使用起来更简单)。@KevinS——你是对的,我修改了我的答案以反映这一点。