C#:使用未分配的局部变量,使用foreach和if

时间:2011-07-03 18:07:47

标签: c#

我有以下代码:
我收到错误,“使用未分配的局部变量” 我确信这很简单,但我很困惑......

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

6 个答案:

答案 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>();