public static void Resize<T>(где T - Тип элементов массива.
ref T[] array,
int newSize )
array - Подлежащий изменению размера одномерный массив, индексация которого начинается с нуля, или значение null для создания нового массива заданного размера.
newSize - Размер нового массива.
(ref - ссылка)
class Array2В благодраность можете пройти по одной из рекламных ссылок на странице ;)
{ // Изменение размера двухмерного массива, где a и b - новые размеры массива
public static void Resize<T>(ref T[,] arr, int a, int b)
{ //создаем временный массив
T[,] tmp = new T[a,b];
c = arr.GetLength(0);
d = arr.GetLength(1);
for (int i = 0; i < a; i++)
{ //переход по элементам
for (int j = 0; j < b; j++)
{ //чтобы не выйти за пределы исходного массива, если увеличиваем
if (i < c && j < d)
tmp[i, j] = arr[i, j]; //перемещаем элементы во временный массив
else
tmp[i, j] = default(T); //если увеличиваем, то заполняем массив элементами по умолчанию
}
}
arr = tmp; //перемещаем обратно в исходный массив
}
}
Если есть придложения, пишите. Рассмотрю ваши варианты по внесению изменений в код.
Метод протестирован на int и string, как на увеличение, так и на уменьшение размера.
Update: вариант номер два
public static void ResizeArray<T>(ref T[,] original, int cols, int rows)
{
T[,] newArray = new T[rows, cols];
Array.Copy(original, newArray, original.Length);
original = newArray;
}
здорово, спасибо
ОтветитьУдалитьЗдравствуйте. Есть вопрос, как потом вызвать public static void Resize? Resize(ref char[,] Arr,xsize,ysize) вот так не получается. p.s. я новичек, изучаю C#
ОтветитьУдалитьа нафиг пишешь что ссылка, в шарпах все ссылки :) просто пишешь туда туда свой массив
Удалитьвторое: надо в больше меньше заключить тип передаваемого массива, иначе работать не будет :(
не могу привести правильный вариант, блогспот считает что я пишу html :(
гг, ref это не просто ссылка, ref - магическая ссылка =)...
ОтветитьУдалитьПопробуй переинициилизировать массив другого размера внутри другой области видимости без ref =), изменится ли содержимое массива ?