我的代码如下:
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);
}
为什么一直提出“使用未分配的局部变量”错误?
答案 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 = "";
您的代码实际上存在两个问题:
sbytes.GetUpperBound(0)
返回0,则永远不会输入您的循环,因此永远不会执行bytesss += ...
。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());
}