Если вы не хотите использовать List
, ArrayList
или другую коллекцию динамического размера, а затем конвертировать в массив (кстати, этот метод я бы порекомендовал), тогда вы Вы должны выделить массив для его максимально возможного размера, отследить, сколько элементов вы в него поместите, а затем создать новый массив, содержащий только эти элементы:
private Update BuildMetaData(MetaData[] nvPairs)
{
Update update = new Update();
InputProperty[] ip = new InputProperty[20]; // how to make this "dynamic"
int i;
for (i = 0; i < nvPairs.Length; i++)
{
if (nvPairs[i] == null) break;
ip[i] = new InputProperty();
ip[i].Name = "udf:" + nvPairs[i].Name;
ip[i].Val = nvPairs[i].Value;
}
if (i < nvPairs.Length)
{
// Create new, smaller, array to hold the items we processed.
update.Items = new InputProperty[i];
Array.Copy(ip, update.Items, i);
}
else
{
update.Items = ip;
}
return update;
}
Альтернативным методом будет всегда присваивать update.Items = ip;
, а затем изменять размер при необходимости:
update.Items = ip;
if (i < nvPairs.Length)
{
Array.Resize(update.Items, i);
}
Это меньше кода, но, скорее всего, он будет выполнять ту же работу (т. Е. Создавать новый массив и копировать старые элементы).