我需要知道如何在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;
}
答案 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()
也是如此,您可以使用反汇编程序