C#:使用未分配的局部变量,使用foreach和if
我有以下代码:
我得到错误,“使用未分配的局部变量”我确信这很简单,但我很困惑..
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; }
声明时初始化结果。 如果集合为空,则不会采用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; }
如果RssData
中没有项目,则result
将从未设置,因此无效。
初始化result
(例如, string result = null;
)或在设计中考虑空洞,并在该场景中设置或返回失败状态。
那是因为编译器无法知道RssData
总是有任何项目。 如果它是空的,循环中的代码将永远不会被执行,并且永远不会分配变量。
只需在创建变量时将其设置为null,以便它始终具有值:
string result = null;
如果RssData
项为零,则循环不会运行, result
未定义。 您需要将其初始化为某些内容(例如string result = "";
)以避免此错误。
改变你的行
string result;
至
string result = string.Empty; // or null depending on what you wish to return (read further)
编译器只是说“嘿,你正在使用结果,它还没有被分配!”。 如果您在初始实例化中没有这样做,那么当您第一次分配它时,这甚至会出现问题。
如果返回空字符串,由于数组参数为空,您还需要考虑如何处理代码。 您可以选择返回空字符串或空值。 这只是一个行为决定。