繁体   English   中英

使用未分配的局部变量

[英]Use of unassigned local variable

我在编写从十六进制到bin,dec到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;
       }
}

之所以会出现该错误,是因为没有为变量分配默认值,并且由于唯一的分配位于if块内部,因此编译器认为该变量永远不会被分配。

如果仅将其初始化为0,则不会再显示该错误。

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

您要初始化变量:

int Dec_Int10 = 0;

否则,编译器不知道是否已为其分配值。

您从未初始化过Dec_Int10 ,这是在抱怨,因为您拥有所有这些if语句,编译器无法保证它将满足if语句之一并设置Dec_Int101

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

int Dec_Int10 = -1;

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

您只需要改变

int Dec_Int10

int Dec_Int10 = 0;

由于编译器无法以其他方式使用Dec_Int10之前会对其进行设置。

添加其他将是最好的事情。 如果首先将其初始化,则很可能会重置该值。 使用else将更加有效。

看一下您的代码。

如果txtBox1,2,3和4同时为ALL空/空,会发生什么情况?

没有任何东西分配给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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM