如何创建在构造函数中的阵列将在以后使用

问题描述 投票:1回答:3

我想提出一个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;

           }

       }
   }
c# variables types constructor global-variables
3个回答
4
投票

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

0
投票

标准的方法是使用仿制药,而不是像Matrix<T>类型的字符串名称。

如果你想在运行时指定类型为字符串,你必须要么添加多个字段来存储每种类型的数组或使用dynamicobject作为阵列的类型(因为你不能分配给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问题。


0
投票

考虑generics

public class Matrix<T> 
{    
    public T[,] matrix;

    public Matrix<T>(int x, int y)
    {
        matrix = new T[x, y];
    }
}

你也许可以在互联网上找到一个现有的,经过严格测试的Matrix类的地方。

© www.soinside.com 2019 - 2024. All rights reserved.