4

以下函数生成错误,“使用未分配的局部变量'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;
    }
4

7 回答 7

2

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

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

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

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

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

于 2013-03-22T11:55:13.317 回答
0

用一些值初始化intLast,因为循环不能确保分配值,因为循环的执行是在运行时决定的。

 int intLast = 0;

以下几行要求未分配的变量,因为控制可能不会进入循环分配值。

string strOutput = strInput.Substring(strInput.Length - intLast);
于 2013-03-22T11:52:53.317 回答
0

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

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

int intLast = 0
于 2013-03-22T11:53:03.650 回答
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;
}
于 2013-03-22T11:53:17.833 回答
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最初分配为零。

于 2013-03-22T11:53:18.917 回答
0

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

编译器不知道intLast无论如何都会分配变量 like 。

 int intLast = 0;
于 2013-03-22T11:53:43.233 回答
0

你应该初始化你的变量,比如

int intLast = 0;

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

于 2013-03-22T11:56:11.883 回答