Стандартный подход заключается в использовании обобщенных типов вместо имени строки типа, подобного Matrix<T>
.
Если вы хотите указать тип как строку во время выполнения, вам нужно либо добавить несколько полей для хранения каждоготип массива или используйте dynamic
или object
в качестве типа массива (поскольку вы не можете присвоить float[][]
полю типа int[][]
).
Для кода, не чувствительного к производительности IВы можете использовать dynamic
, поскольку он даст вам код, который выглядит разумно (вы теряете intellisense и безопасность времени компиляции) и в любом случае проверяет все операции во время выполнения.
public class Matrix
{
dynamic matrix;
Matrix(int x,int y,string type)
{
switch (type)
{
case "int":
matrix =
Enumerable.Repeat(0, x).Select(_ => new int[y]).ToArray();
break;
case "double":
//initialize a double 2d array
matrix =
Enumerable.Repeat(0, x).Select(_ => new double[y]).ToArray();
break;
case "float":
default:
//initialize a float 2d array
matrix =
Enumerable.Repeat(0, x).Select(_ => new float[y]).ToArray();
break;
}
}
}
Об инициализации массива см. Многомерный массив вопрос.