局部变量出错

时间:2013-03-22 11:51:59

标签: c# variables scope

以下函数生成错误,“使用未分配的局部变量'intLast'。我不确定我做错了什么。

    static string RemovePath(string strInput)
    {

        int intLast;

        for (int i = 1; i < strInput.Length; i++)
        {
            if (strInput.Substring(i, 1) == @"\")
            {
                intLast = i;
            }
        }

        string strOutput = strInput.Substring(strInput.Length - intLast);

        return strOutput;
    }

7 个答案:

答案 0 :(得分:2)

您正在使用以下行中的变量intLast

string strOutput = strInput.Substring(strInput.Length - intLast);

但该变量仅在某些条件下具有值(strInput.Length > 1strInput.Substring(i, 1) == @"\")。因此错误。

要解决此问题,请在声明中提供默认值:

int intLast = 0; // or any default value.

答案 1 :(得分:0)

使用某个值初始化intLast,因为循环无法确保分配值,因为循环的执行是在运行时决定的。

 int intLast = 0;

以下行询问未分配的变量,因为控件可能不会进入循环以分配值。

string strOutput = strInput.Substring(strInput.Length - intLast);

答案 2 :(得分:0)

由于您只在条件内部指定intLast,因此从编译器的角度来看,您可以在不初始化的情况下使用它。

您应该在开始时将其初始化为某个默认值,即使您不希望使用它。

int intLast = 0

答案 3 :(得分:0)

您需要为intLast分配默认值。

试试这个:

static string RemovePath(string strInput)
{
    int intLast = 0;

    for (int i = 1; i < strInput.Length; i++)
    {
        if (strInput.Substring(i, 1) == @"\")
        {
            intLast = i;
        }
    }

    string strOutput = strInput.Substring(strInput.Length - intLast);

    return strOutput;
}

答案 4 :(得分:0)

只需修改

int intLast = 0;

整个代码将如下所示:

静态字符串RemovePath(string strInput)     {         int intLast = 0;

    for (int i = 1; i < strInput.Length; i++)
    {
        if (strInput.Substring(i, 1) == @"\")
        {
            intLast = i;
        }
    }

    string strOutput = strInput.Substring(strInput.Length - intLast);

    return strOutput;
}

您最初必须将intLast指定为零。

答案 5 :(得分:0)

您应该初始化您的intLast变量。

编译器不知道无论如何都会分配像intLast这样的变量。

 int intLast = 0;

答案 6 :(得分:0)

您应该初始化您的变量,如

int intLast = 0;

因为如果代码无法达到if条件,它可能会保持未分配状态。