为什么我会收到错误“使用未分配的本地变量”?

时间:2012-10-10 09:16:27

标签: c#

我的代码如下:

string mybytes(int[] sbytes)
{
    string bytesss;
    for(int i=1; i< sbytes.GetUpperBound(0)+1;i++)
    {
        bytesss += "," + IntToHex(sbytes[i - 1]).ToString();
    }
    return bytesss;
}

private string IntToHex(int number)
{
    return string.Format("{0:x}", number);
}

为什么一直提出“使用未分配的局部变量”错误?

6 个答案:

答案 0 :(得分:1)

C#编译器要求你provide value to string variable before you use it,如果它does not go in the for loop as compiler does not know whether control will go in for loop在执行期间会怎样。如果控件不进入for循环方法将返回编译器不喜欢的未分配变量并给出错误。你是using the value of variable before assigning it due to += operator,所以你会get error due to this over here。分配空字符串可能会阻止我们编译错误,因为下面给出的语句指定空字符串。

string  bytesss = string.Empty;

答案 1 :(得分:0)

string bytesss;

应该是

string bytesss = String.Empty;

试试。

答案 2 :(得分:0)

好吧,你永远不会在你的代码中初始化bytesss

将其更改为:

string bytesss = "";

您的代码实际上存在两个问题:

  1. 如果sbytes.GetUpperBound(0)返回0,则永远不会输入您的循环,因此永远不会执行bytesss += ...
  2. 即使输入循环,您仍然有问题。 bytesss += ...相当于bytesss = bytesss + ...。但是在循环的第一次迭代中bytesss是什么?它未定义,因为它从未被初始化。

答案 3 :(得分:0)

你已经声明了字符串而没有初始化它。尝试将其声明为“string bytess = String.Empty;”代替。 This essay是一个很好的起点。

答案 4 :(得分:0)

在代码中使用以下内容。它解决了这个问题。

string  bytesss = string.Empty;

string bytesss = "";

答案 5 :(得分:0)

这里的问题是你是一个名为bytesss的局部变量,在你尝试连接它之前没有被初始化。这样做类似于尝试将字符串连接到null,它没有任何意义。请考虑以下代码。

string bytesss = null;
bytesss += ",";

或换句话说......

string bytesss = null + ",";

这些都没有意义,所以你需要确保在尝试连接之前将bytesss设置为某个初始值。例如:

string bytesss = "";

string bytesss = string.Empty;

最后,您可以采取其他一些措施来简化代码。如果您使用的是最新版本的.NET框架并拥有LINQ,则可以执行以下操作:

string mybytes(int[] sbytes)
{ 
    return string.Join(",", sbytes.Select(i => IntToHex(i)).ToArray());
}

或者如果您使用的是旧版本,则可以执行以下操作:

string mybytes(int[] sbytes)
{ 
    List<string> list = new List<string>();

    foreach(int i in sbytes)
        list.Add(IntToHex(i));

    return string.Join(",", list.ToArray());
}