如何在c#中创建动态大小的数组或重新调整数组大小?

时间:2011-03-01 00:24:39

标签: c# arrays

我需要知道如何在C#中动态调整数组大小。在下面我写的方法中,我需要能够返回一个只包含用户输入的数字的数组,最多包含8个数字。因此,如果用户决定只想输入3个数字,则该数组应仅包含3个数字,而不是8个。

现在我知道数组在实例化时需要包含一个大小。那么如何在不使用列表的情况下解决这个问题呢?循环完成后有没有办法重新调整数组的大小?

提前致谢。

        static int[] fillArray()
    {
        int[] myArray;
        myArray = new int[8];
        int count = 0;
        do
        {
            Console.Write("Please enter a number to add to the array or \"x\" to stop: ");
            string consoleInput = Console.ReadLine();
            if (consoleInput == "x")
            {
                Array.Resize(ref myArray, count);
                return myArray;
            }
            else
            {
                myArray[count] = Convert.ToInt32(consoleInput);
                ++count;
            }

        } while (count < 8);

        Array.Resize(ref myArray, count);
        return myArray;

    }

3 个答案:

答案 0 :(得分:7)

您可以在方法逻辑中使用List<int>,然后使用return myIntList.ToArray();

答案 1 :(得分:1)

通常,对于此类应用,您需要使用List。如果你真的需要一个数组,你可以使用ToArray方法,但重新考虑一个数组是否真的是你想要的。通常,List用于动态大小的集合而不是数组。

您可以随时修改代码:

static int[] fillArray()
{
    List<int> list = new List<int>();

    do
    {
        Console.Write("Please enter a number to add to the array or \"x\" to stop: ");
        string consoleInput = Console.ReadLine();

        if (consoleInput == "x")
        {
            return list.ToArray();
        }
        else
        {
            list.Add(Convert.ToInt32(consoleInput));
        }

    } while (count < 8);

    return list.ToArray();
}

但正如我之前提到的,真的重新考虑更改您的方法以返回List并在您的调用代码中使用List

答案 2 :(得分:0)

您可以实现自己的方法,接受数组和新大小作为创建新数组的参数,深层复制元素然后分配给您的数组。 Array.Resize()也是如此,您可以使用反汇编程序

进行观察