为什么在执行TryParse之前必须给变量赋值?

时间:2018-10-02 17:00:17

标签: c#

这是我编写的用于解决二次方程式的程序。我有三个文本框,用于输入a,b和c的值。如果我使用以下代码,而没有在if语句之前将任何值分配给a,b或c,则在double Delta = Math.Pow(b, 2) - 4 * a * c;行中会出现错误“使用未分配的变量”,仅关于变量b和c(不是a )。

private void bt_Calculate_MouseClick(object sender, MouseEventArgs e)
    {
        Double a, b, c;


        if (txt_b.Text != "" && txt_b.Text != "" && txt_c.Text != ""

         && (Double.TryParse(txt_a.Text, out a) && Double.TryParse(txt_b.Text, out b) && Double.TryParse(txt_c.Text, out c)) == true)

        {

            double Delta = Math.Pow(b, 2) - 4 * a * c;

            if (Delta > 0)
            {
                Double x1 = Math.Round((-b + Math.Sqrt(Delta)) / (2 * a), 4);
                Double x2 = Math.Round((-b - Math.Sqrt(Delta)) / (2 * a), 4);
                txt_Result1.Text = Convert.ToString(x1);
                txt_Result2.Text = Convert.ToString(x2);
            }

            else if (Delta == 0)
            {

                Double x1 = Math.Round(-b / (2 * a), 4);
                txt_Result1.Text = Convert.ToString(x1);
            }

            else
            {
                MessageBox.Show("Impossible Equation.");
            }

        }

        else if ((txt_a.Text == "") || (txt_b.Text == "") || (txt_c.Text == ""))
        {
            MessageBox.Show("Provide a value for a, b and c.");
        }
        else
        {
            MessageBox.Show("Provide a valid number, please");

        }

}

但是,当我在if语句之前为所有三个变量赋值0时,程序不会给出任何错误并输出正确的结果。 因此:Double a=0, b=0, c=0; 我想知道为什么会这样。如果TryParse返回的值为true,是否不应该将值存储在给定的变量中?如果在第一个if块的开头将文本框的内容分配给它们各自的变量,我的程序也可以工作。例如:txt_a.Text = a

1 个答案:

答案 0 :(得分:2)

编译器不够聪明。

完全可以这样:

double a, b;
if (double.TryParse("5", out a) && double.TryParse("6", out b))
    // works fine
    Console.WriteLine("a = {0}, b = {1}", a, b);

但是,如果我们使条件语句复杂一点,那么突然编译器将不再确定您是否已初始化变量:

double a, b;
if (true == (double.TryParse("5", out a) && double.TryParse("6", out b)))
    // generates an error
    Console.WriteLine("a = {0}, b = {1}", a, b);

将这些变量初始化为0是完全可以的。