使用未分配的局部变量错误C#

时间:2012-10-11 06:55:19

标签: c#

这是关于前一段时间发布的问题  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]);

3 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:3)

您尚未初始化数组new_arry。您需要指定其大小。

int[] new_arr = new int[10];

您正在执行的代码内部:

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

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

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

所以你的代码是:

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

答案 2 :(得分:1)

您尚未分配变量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。它将抛出null引用异常。