Если это только для практики, сделайте это. но я предлагаю вам использовать .Net Array.Resize()
, если вы хотите использовать его в своем коде. обычно библиотеки .NET лучше всего реализуются и оптимизируются.
В любом случае ... Вы можете сделать это с общим методом
private static void Resize<T>(ref T[] array,int size)
{
T[] token = array.Take(size).ToArray(); // attempt to take first n elements
T[] temp = new T[size]; // create new reference
token.CopyTo(temp, 0); // copy array contents to new array
array = temp; // change reference
}
Обратите внимание, что вы не можете сделать это без параметра ref
. (Другой способ - вернуть массив, конечно)
Вы можете подумать, что массивы передаются по ссылке. это правда. Но ссылки на него передаются по значению. поэтому всякий раз, когда вы пытаетесь изменить ссылку, он больше не ссылается на исходный массив. вы можете изменить содержимое. Чтобы сделать это возможным, вы должны использовать ref
, чтобы напрямую передать ссылку в метод.
О коде:
{1,2,3}
, если размер его 2
, очевидно, это будет удалить последний параметр. так что у вас будет {1,2}
если вы измените его размер до 4
, то он даст массив с новыми значениями по умолчанию. либо null
для ссылочных типов, либо 0
для типов значений (false
для булевого типа). здесь у вас будет {1,2,3,0}
int[] array = new[] {1, 2, 3};
Resize(ref array,4);
Console.WriteLine(array.Length); // outputs 4
Проблема в том, что любые ссылки на старый массив не будут меняться для ссылки на новый массив. – crashmstr
https://msdn.microsoft.com/en-us/library/bb348051(v=vs.110).aspx Вы можете посмотреть исходный источник для этого и посмотреть, как они это сделали, но это должно быть довольно очевидно. –
в основном, создайте новый массив – VisualBean