How to set array length in c# dynamically How to set array length in c# dynamically arrays arrays

How to set array length in c# dynamically


InputProperty[] ip = new InputProperty[nvPairs.Length]; 

Or, you can use a list like so:

List<InputProperty> list = new List<InputProperty>();InputProperty ip = new (..);list.Add(ip);update.items = list.ToArray();

Another thing I'd like to point out, in C# you can delcare your int variable use in a for loop right inside the loop:

for(int i = 0; i<nvPairs.Length;i++{..}

And just because I'm in the mood, here's a cleaner way to do this method IMO:

private Update BuildMetaData(MetaData[] nvPairs){        Update update = new Update();        var ip = new List<InputProperty>();        foreach(var nvPair in nvPairs)        {            if (nvPair == null) break;            var inputProp = new InputProperty            {               Name = "udf:" + nvPair.Name,               Val = nvPair.Value            };            ip.Add(inputProp);        }        update.Items = ip.ToArray();        return update;}


If you don't want to use a List, ArrayList, or other dynamically-sized collection and then convert to an array (that's the method I'd recommend, by the way), then you'll have to allocate the array to its maximum possible size, keep track of how many items you put in it, and then create a new array with just those items in it:

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;}

An alternate method would be to always assign update.Items = ip; and then resize if necessary:

update.Items = ip;if (i < nvPairs.Length){    Array.Resize(update.Items, i);}

It's less code, but will likely end up doing the same amount of work (i.e. creating a new array and copying the old items).


Use this:

 Array.Resize(ref myArr, myArr.Length + 5);