我有以下代码:
我收到错误,“使用未分配的局部变量”
我确信这很简单,但我很困惑......
public string return_Result(String[,] RssData, int marketId)
{
string result;
foreach (var item in RssData)
{
if (item.ToString() == marketId.ToString())
{
result = item.ToString();
}
else
{
result = "";
}
}
return result;
}
答案 0 :(得分:12)
声明时初始化结果。如果集合为空,则不会采用if语句的分支,并且在返回结果之前永远不会分配结果。
public string return_Result(String[,] RssData, int marketId)
{
string result = "";
foreach (var item in RssData)
{
if (item.ToString() == marketId.ToString())
{
result = item.ToString();
}
}
return result;
}
答案 1 :(得分:2)
如果RssData
中没有项目,那么result
将永远不会被设置,因此无效。
初始化result
(例如string result = null;
)或在设计中考虑空洞,并在该场景中设置或返回失败状态。
答案 2 :(得分:2)
这是因为编译器无法知道RssData
中总是有任何项目。如果它是空的,循环中的代码将永远不会被执行,并且永远不会分配变量。
在创建变量时,只需将变量设置为null,以便它始终具有值:
string result = null;
答案 3 :(得分:1)
如果RssData
项为零,则循环不会运行,result
未定义。您需要将其初始化为某些内容(例如string result = "";
)以避免此错误。
答案 4 :(得分:1)
从
更改您的行string result;
要
string result = string.Empty; // or null depending on what you wish to return (read further)
编译器只是在说“嘿,你正在使用结果,它还没有被分配!”。如果您在初始实例化中没有这样做,那么当您第一次分配它时,这甚至会出现问题。
如果返回空字符串,您还需要考虑如何处理代码,因为您的数组参数是空的。您可以选择返回空字符串或空值。这只是一个行为决定。
答案 5 :(得分:0)
所有变量类型也可能发生这种情况。
对于集合和对象,请使用new初始化。
例如List<string> result = new List<string>();