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) 

编译器只是说“嘿,你正在使用结果,它还没有被分配!”。 如果您在初始实例化中没有这样做,那么当您第一次分配它时,这甚至会出现问题。

如果返回空字符串,由于数组参数为空,您还需要考虑如何处理代码。 您可以选择返回空字符串或空值。 这只是一个行为决定。