使用未分配的局部变量

我在编写从hex到二进制的转换器时遇到问题,转到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; } } 

您得到该错误,因为没有为变量分配默认值,并且因为对于它的唯一赋值是在块内,编译器认为有可能永远不会分配变量。

如果你只是将它初始化为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; 

因为编译器无法validation在以另一种方式使用之前将设置Dec_Int10

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

看看你的代码。

如果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);