使用未分配的局部变量

时间:2010-11-05 21:27:48

标签: c# asp.net .net-3.5 .net-4.0

我在编写转换器时遇到问题,从十六进制到二进制,转到bin等。这是我的代码,当我调试它时出现错误“使用未分配的局部变量Dec_Int10”,你能帮帮我吗?我该如何解决这个错误?

protected void Button_Click (object sender, Event Args e)
{
      if (Page.IsValid)
      {
           int Dec_Int10;
           if(!(string.IsNullOrEmpty(TextBox1.Text)))
           {
                 Dec_Int10 = Convert.ToInt32(TextBox1.Text, 10)));
           }
           if(!(string.IsNullOrEmpty(TextBox2.Text)))
           {
                 Dec_Int10 = Convert.ToInt32(TextBox2.Text, 16)));
           }
           if(!(string.IsNullOrEmpty(TextBox3.Text)))
           {
                 Dec_Int10 = Convert.ToInt32(TextBox3.Text, 8)));
           }
           if(!(string.IsNullOrEmpty(TextBox4.Text)))
           {
                 Dec_Int10 = Convert.ToInt32(TextBox4.Text, 2)));
           }
           string Dec_Str10 = Convert.ToString(Dec_Int10, 10);
           string Hex_Str16 = Convert.ToString(Dec_Int10, 16);
           string Oct_Str8 = Convert.ToString(Dec_Int10, 8);
           string Bin_Str2 = Convert.ToString(Dec_Int10, 2);
           TextBox1.Text = Dec_Str10;
           TextBox2.Text = Hex_Str16;
           TextBox3.Text = Oct_Str8;
           TextBox4.Text = Bin_Str2;
       }
}

7 个答案:

答案 0 :(得分:4)

您得到该错误,因为没有为变量分配默认值,并且因为它只在块内部进行分配,编译器认为永远不会分配变量。

如果您只是将其初始化为0,则不会再出现错误。

这是编译器提供的一项检查,可以防止您犯错误。

答案 1 :(得分:2)

您想要初始化变量:

int Dec_Int10 = 0;

否则编译器不知道是否曾为其分配了值。

答案 2 :(得分:2)

您从未初始化Dec_Int10,它抱怨因为您拥有所有if语句,编译器无法保证它将满足if语句之一并设置{{ 1}}。

添加Dec_Int101语句或尝试将其初始化为:

else

答案 3 :(得分:1)

声明它时,将Dec_Int10声明为等于零(或您希望它具有的任何默认值)。

答案 4 :(得分:0)

你只需要改变

int Dec_Int10

int Dec_Int10 = 0;

因为编译器无法验证Dec_Int10是否会在以另一种方式使用之前设置。

答案 5 :(得分:0)

添加其他内容是最好的选择。如果您开始初始化它,您很可能只会重置该值。使用else会更有效率。

答案 6 :(得分:0)

看看你的代码。

如果txtBox1,2,3& 4是同时为空/空?

没有任何东西被分配给Dec_Int10。因此,稍后在代码中,您将尝试转换未初始化的变量。编译器查看执行路径并确定存在该方案(例如,如果失败则全部为4),该变量未初始化。

正如其他人所说,您可以使用以下方法解决此问题: int Dec_Int10 = 0;

更大的学习点是为什么会发生这种情况?

例如,此代码不会生成错误,因为无论文本框1,2,3,4 Dec_Int10的状态在转换之前是否会初始化。

        int Dec_Int10;

        if (!(string.IsNullOrEmpty(TextBox4.Text)))
            Dec_Int10 = Convert.ToInt32(TextBox4.Text, 2);
        else if (!(string.IsNullOrEmpty(TextBox3.Text)))
            Dec_Int10 = Convert.ToInt32(TextBox3.Text, 8);
        else if (!(string.IsNullOrEmpty(TextBox2.Text)))
            Dec_Int10 = Convert.ToInt32(TextBox2.Text, 16);
        else if (!(string.IsNullOrEmpty(TextBox1.Text)))
            Dec_Int10 = Convert.ToInt32(TextBox1.Text, 10);
        else
            Dec_Int10 = 0;

       TextBox1.Text = Convert.ToString(Dec_Int10, 10);
       TextBox2.Text = Convert.ToString(Dec_Int10, 16);
       TextBox3.Text = Convert.ToString(Dec_Int10, 8);
       TextBox4.Text = Convert.ToString(Dec_Int10, 2);