如何重构这段代码?

kat*_*245 4 c#

我正在使用Visual C#设计一个简单的计算器,但我遇到了一个恼人的运行时错误(这对于静态类型的语言来说很有趣).

首先让我告诉你部分代码:

private float get_input()
{
    try
    {
        return float.Parse(textBox1.Text);
    }
    catch
    {
        textBox2.Clear();
        textBox2.AppendText("Invalid Input");
        return 0;
    }

}

private void button1_Click(object sender, EventArgs e)
{ 
    textBox2.Clear();
    float v = get_input();
    textBox2.AppendText((Math.Sin(v)).ToString());
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我运行该程序,并让我们说,例如,我输入"a"的输入框,我的程序并通过显示"无效的输入"到输出箱处理异常.然而,它然后继续计算默认浮点类型的sin或cos(等).所以输出框中的答案如下:"invalid input1"或"invalid input0".我提供了截图:

我确实意识到这是因为我告诉它在调用get_input()方法后立即附加文本,但我真的不知道如何找到解决方法.我试过用7种方式重构我的代码,但总会出错.

Ken*_*eth 9

使用TryParse而不是try ... catch

private void button1_Click(object sender, EventArgs e)
{ 
    textBox2.Clear();
    float result;
    if (float.TryParse(textBox1.Text, out result))
    {
         textBox2.AppendText(Math.Sin(result).ToString());
    }
    else
    {
        textBox2.Text = "Invalid Input";
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的方法,IMO. (2认同)