Просто для удовольствия, вот один из способов использовать дженерики, чтобы Redim/расширить одномерный массив (добавить еще одну «строку»):
static T[] Redim<T>(T[] arr, bool preserved)
{
int arrLength = arr.Length;
T[] arrRedimed = new T[arrLength + 1];
if (preserved)
{
for (int i = 0; i < arrLength; i++)
{
arrRedimed[i] = arr[i];
}
}
return arrRedimed;
}
и один, чтобы добавить п строк (хотя это не мешает пользователю занижения массива, который будет бросать ошибку в цикл):
static T[] Redim<T>(T[] arr, bool preserved, int nbRows)
{
T[] arrRedimed = new T[nbRows];
if (preserved)
{
for (int i = 0; i < arr.Length; i++)
{
arrRedimed[i] = arr[i];
}
}
return arrRedimed;
}
Я уверен, что вы получите идею.
Для многомерного массива (два измерения), вот одна возможность:
static T[,] Redim<T>(T[,] arr, bool preserved)
{
int Ubound0 = arr.GetUpperBound(0);
int Ubound1 = arr.GetUpperBound(1);
T[,] arrRedimed = new T[Ubound0 + 1, Ubound1];
if (preserved)
{
for (int j = 0; j < Ubound1; j++)
{
for (int i = 0; i < Ubound0; i++)
{
arrRedimed[i, j] = arr[i, j];
}
}
}
return arrRedimed;
}
В вашей программе, используйте это с или даже без указанного типа, компилятор распознает его:
int[] myArr = new int[10];
myArr = Redim<int>(myArr, true);
или
int[] myArr = new int[10];
myArr = Redim(myArr, true);
Не уверен, что все это действительно актуально. = D Пожалуйста, не стесняйтесь исправить меня или улучшить код. ;)
Я думаю, другая сторона будет «Я потрясен, узнав, что VB поддерживает массивы с динамическим размером». – user7116 2008-11-30 19:00:56
yeah sixlettervariables, кажется, массивы с динамическим размером были слишком просты в использовании, но с серьезной производительностью. – 2008-12-09 06:51:21