【问题标题】:Error with local variable局部变量错误
【发布时间】:2013-03-12 06:25:41
【问题描述】:

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

【问题讨论】:

  • 不会只删除第一个路径部分,使循环变得多余吗?仅供参考,有实用功能,例如System.IO.Path.GetFileName()
  • System.IO.Path.GetFileName() 更容易!谢谢!

标签: c# variables scope


【解决方案1】:

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

 int intLast = 0;

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

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

【讨论】:

    【解决方案2】:

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

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

    int intLast = 0
    

    【讨论】:

      【解决方案3】:

      您需要为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】:

        只需编辑

        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】:

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

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

           int intLast = 0;
          

          【讨论】:

            【解决方案6】:

            您在以下行使用变量intLast

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

            但变量只有在特定条件下才会有值(strInput.Length &gt; 1strInput.Substring(i, 1) == @"\")。因此错误。

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

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

            【讨论】:

              【解决方案7】:

              你应该像

              一样初始化你的变量
              int intLast = 0;
              

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-08-03
                • 1970-01-01
                • 2010-11-17
                • 2021-08-09
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多