【问题标题】:Use of unassigned local variable error C#使用未分配的局部变量错误C#
【发布时间】:2012-10-11 15:28:49
【问题描述】:

这是关于前一段时间发布的上一个问题 Remove -1 entry from integer array

我知道有非常快速的解决方案,在前面发布的问题的答案部分中发布了一条答案,但作为一个新手,我尝试通过 for 循环来做。

  int[] arr = new int[]{ 1, -1, -1, 1 };
            int[] new_arr;
            int index = 0;
            for (int i = 0; i < arr.Length; i++)
            {
               // Console.WriteLine(arr[i]);
                if (arr[i] == -1)
                    continue;
                else
                    new_arr[index++] = arr[i];
            }

我遇到错误

使用未赋值的局部变量“new_arr”

我做错了什么。

编辑

        int[] arr = new int[]{ 1, -1, -1, 1 };
        int[] new_arr = new[arr.Length]; //Error being shown at this line
        int index = 0;
        for (int i = 0; i < arr.Length; i++)
        {

            if (arr[i] == -1)
                continue;
            else
                new_arr[index++] = arr[i];
        }

        for(int j=0;j<new_arr.Length;j++)
            Console.WriteLine(new_arr[j]);

【问题讨论】:

    标签: c#


    【解决方案1】:

    编译器警告您尚未初始化 new_arr 变量,以后不能使用它:

    int[] new_arr = new int[arr.Length];
    

    在这种情况下,我将new_arr 数组初始化为与arr 数组相同的大小。

    【讨论】:

    • 那么你必须有一些你没有在这里显示的其他代码,因为如果你只按照我的建议进行更改,它将编译。
    • 先生,我已将完整的代码粘贴到上方的 EDIT 中,指示出现错误的行。请帮忙。如果事先不知道大小,也没有办法使用数组吗?
    【解决方案2】:

    你还没有初始化你的数组new_arry。您需要指定其大小。

    int[] new_arr = new int[10];
    

    在您正在执行的代码中:

    new_arr[index++] = arr[i];
    

    由于数组尚未初始化并且您正在尝试使用它,这就是您收到此错误的原因。

    您可以使用List&lt;int&gt; 代替数组,因为您似乎不确定代码中数组的大小。

    所以你的代码是:

    int[] arr = new int[]{ 1, -1, -1, 1 };
    List<int> tempList = new List<int>();
    int[] new_arr;
    int index = 0;
    for (int i = 0; i < arr.Length; i++)
          {
           // Console.WriteLine(arr[i]);
             if (arr[i] == -1)
                  continue;
             else
                tempList.Add(arr[i]);
          }
    new_arr = tmepList.ToArray();
    

    或者完整的代码可以缩短为:

    int new_arr = arr.Where(r=> r!= -1).ToArray();
    

    【讨论】:

      【解决方案3】:

      您尚未分配变量 new_arr。因此它显示错误。你的代码可以是这样的-

      int[] arr = new int[] { 1, -1, -1, 1 };
              int[] new_arr = new int[4];
              int index = 0;
              for (int i = 0; i < arr.Length; i++)
              {
                  // Console.WriteLine(arr[i]);
                  if (arr[i] == -1)
                      continue;
                  else
                      new_arr[index++] = arr[i];
              }
              for (int i = 0; i < new_arr.Length; i++)
              {
                  Console.WriteLine(new_arr[i]);
      
              }
      

      您不能在 c# 中使用任何未分配或悬空的变量。不要将 new_arr 分配给 null。会抛出空引用异常。

      【讨论】:

      • 您可以使用 ArrayList 来获得动态长度。它提供与此上下文中的数组相同的功能
      猜你喜欢
      • 2014-05-13
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      • 2013-10-18
      • 1970-01-01
      • 1970-01-01
      • 2016-10-04
      相关资源
      最近更新 更多