1

我在下面有这段代码:

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);
}

为什么它不断引发“使用未分配的局部变量”错误?

4

6 回答 6

1

这里的问题是,在您尝试连接到它之前,没有初始化名为 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());
}
于 2012-10-12T00:05:17.393 回答
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;
于 2012-10-10T09:18:12.920 回答
0

您已经声明了字符串而没有对其进行初始化。尝试将其声明为“string bytess = String.Empty;” 反而。这篇文章是一个很好的起点。

于 2012-10-10T09:20:08.073 回答
0

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

string  bytesss = string.Empty;

或者

string bytesss = "";
于 2012-10-10T09:21:44.157 回答
0

字符串字节;

应该

字符串 bytesss = String.Empty;

试试看。

于 2012-10-10T09:18:02.620 回答
0

好吧,您永远不会在代码中进行初始化bytesss

将其更改为:

string bytesss = "";

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

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