HomeSearch

C# Array.CreateInstance Method

This C# example program uses the Array.CreateInstance method.
Array.CreateInstance creates typed arrays. It does not require the type to be known at compile-time. It is a factory method. When calling it we must specify the size of the target array.Array
This program has 2 sections: in the first section, we create a single-dimensional array of ints. In the second, we create a two-dimensional array. To call Array.CreateInstance, we must pass a Type pointer as the first argument.

Tip: We could pass a variable reference of type "Type" instead of the typeof() operator result.

TypeTypeof, nameof

So: To create a one-dimensional array, only pass one integer after the type. To create a two-dimensional array, pass 2 integers.

C# program that uses Array.CreateInstance method using System; class Program { static void Main() { // [1] Create a one-dimensional array of integers. { Array array = Array.CreateInstance(typeof(int), 10); int[] values = (int[])array; Console.WriteLine(values.Length); } // [2] Create a two-dimensional array of bools. { Array array = Array.CreateInstance(typeof(bool), 10, 2); bool[,] values = (bool[,])array; values[0, 0] = true; Console.WriteLine(values.GetLength(0)); Console.WriteLine(values.GetLength(1)); } } } Output 10 10 2
Discussion. Why would we use the Array.CreateInstance method? Perhaps a program does not know the type of elements we want to create an array of at compile-time. We could pass any Type reference to Array.CreateInstance.

And: This Type does not need to be statically determined (before execution) by the C# compiler.

Note: With newer versions of the C# language, generic types have alleviated this requirement.

Summary. Array.CreateInstance is a way to construct arrays in memory using parameters. We do not need to know at compile-time what type of array will be created. As a factory method, Array.CreateInstance returns the abstract base class Array.IsAs
© 2007-2019 Sam Allen. Every person is special and unique. Send bug reports to info@dotnetperls.com.
Home
Dot Net Perls