我想提出一个Matrix类,并希望使构造输入矩阵式了。我怎么能初始化特定类型的二维数组?
public class Matrix
{
public int[][] matrix;
//??
Matrix(int x,int y,string type)
{
switch (type)
{
case "int":
//initialize a int 2d array
case "double":
//initialize a double 2d array
case "float":
//initialize a float 2d array
default:
//initialize a float 2d array
break;
}
}
}
与new
的约束泛型可能有帮助,如果该类型可以在设计时进行申报
public class Matrix<T> where T : new()
{
public T[][] matrix;
public Matrix(int x, int y)
=> matrix = Enumerable.Range(0,x).Select(elem => new T[y]).ToArray();
}
用法
var something = new Matrix<int>(4,4);
标准的方法是使用仿制药,而不是像Matrix<T>
类型的字符串名称。
如果你想在运行时指定类型为字符串,你必须要么添加多个字段来存储每种类型的数组或使用dynamic
或object
作为阵列的类型(因为你不能分配给float[][]
类型int[][]
的字段) 。
对于非性能敏感的代码,我会用dynamic
去,因为它会给你的代码看起来是合理的(你松散的智能感知和编译时的安全),反正在运行时将验证所有操作。
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;
}
}
}
对于数组初始化看到Multidimensional Array问题。
考虑generics
public class Matrix<T>
{
public T[,] matrix;
public Matrix<T>(int x, int y)
{
matrix = new T[x, y];
}
}
你也许可以在互联网上找到一个现有的,经过严格测试的Matrix类的地方。