148

Is there any method for creating a dynamic array in C#?

3
  • 1
    If you still stuck in the old mud, by using [] instead if List<>, you can use Array.Resize(). Here is a good example. dotnetperls.com/array-resize Commented Mar 28, 2018 at 7:17
  • The link dotnetperls.com/array-resize is not working. (FYI) Commented Aug 13, 2018 at 15:34
  • why not use the list? Commented Nov 25, 2020 at 18:27

9 Answers 9

164

Take a look at System.Collections.Generic.List<T>.

Sign up to request clarification or add additional context in comments.

2 Comments

The question (albeit short and undescriptive) isn't asking about a generic list - Question could be asking about dynamic[] msdn.microsoft.com/en-GB/library/dd264736.aspx (array of dynamic types) or ExpandoObject msdn.microsoft.com/en-us/library/… I could -1 the answer for not mentioning these
@LukeTO'Brien, dynamics were introduced in C# 4.0, which was released a full year after this question was originally asked. OP was probably asking about a resizeable data structure like en.wikipedia.org/wiki/Dynamic_array
106

Expanding on Chris and Migol`s answer with a code sample.

Using an array

Student[] array = new Student[2];
array[0] = new Student("bob");
array[1] = new Student("joe");

Using a generic list. Under the hood the List<T> class uses an array for storage but does so in a fashion that allows it to grow effeciently.

List<Student> list = new List<Student>();
list.Add(new Student("bob"));
list.Add(new Student("joe"));
Student joe = list[1];

Comments

72

Sometimes plain arrays are preferred to Generic Lists, since they are more convenient (Better performance for costly computation -Numerical Algebra Applications for example, or for exchanging Data with Statistics software like R or Matlab)

In this case you may use the ToArray() method after initiating your List dynamically

List<string> list = new List<string>();
list.Add("one");
list.Add("two");
list.Add("three");

string[] array = list.ToArray();

Of course, this has sense only if the size of the array is never known nor fixed ex-ante. if you already know the size of your array at some point of the program it is better to initiate it as a fixed length array. (If you retrieve data from a ResultSet for example, you could count its size and initiate an array of that size, dynamically)

4 Comments

Not worth it, as long as you'are using indexer.
Ararys aren't more convenient (they offer subset of List<T> interface) and offer almost the same performance, since List<T> uses regular array underneath. Iteration for 6000000 elements: List/for: 1971ms Array/for: 1864ms ( Benchmark from stackoverflow.com/questions/454916/… )
If you have to pass an array to an interface then it must be an array. It's much easier to build a list and then make it into an array just before you pass it. I like this answer more than the others because it addresses the question!
Creating an array dynamically is not the same as creating a dynamic array.
37

List<T> for strongly typed one, or ArrayList if you have .NET 1.1 or love to cast variables.

Comments

6

You can do this with dynamic objects:

var dynamicKeyValueArray = new[] { new {Key = "K1", Value = 10}, new {Key = "K2", Value = 5} };

foreach(var keyvalue in dynamicKeyValueArray)
{
    Console.Log(keyvalue.Key);
    Console.Log(keyvalue.Value);
}

Comments

2

you can use arraylist object from collections class

using System.Collections;

static void Main()
{
  ArrayList arr = new ArrayList();
}

when you want to add elements you can use

arr.Add();

Comments

1

Use the array list which is actually implement array. It takes initially array of size 4 and when it gets full, a new array is created with its double size and the data of first array get copied into second array, now the new item is inserted into new array. Also the name of second array creates an alias of first so that it can be accessed by the same name as previous and the first array gets disposed

Comments

0

This answer seems to be the answer you are looking for Why can't I do this: dynamic x = new ExpandoObject { Foo = 12, Bar = "twelve" }

Read about the ExpandoObject here https://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject(v=vs.110).aspx

And the dynamic type here https://msdn.microsoft.com/en-GB/library/dd264736.aspx

Comments

-1

Dynamic Array Example:

Console.WriteLine("Define Array Size? ");
int number = Convert.ToInt32(Console.ReadLine());

Console.WriteLine("Enter numbers:\n");
int[] arr = new int[number];

for (int i = 0; i < number; i++)
{
    arr[i] = Convert.ToInt32(Console.ReadLine());
}
for (int i = 0; i < arr.Length; i++ )
{
    Console.WriteLine("Array Index: "+i + " AND Array Item: " + arr[i].ToString());
}
Console.ReadKey();

1 Comment

There is nothing dynamic about the array in this answer.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.