5

Matrixdouble[,] が使用できるものと同様のカスタム オブジェクト初期化子を実装したい カスタム クラスがありますが、実装方法がわかりません。

理想的には、私はそれがこのようになりたいと思っています

var m1 = new Matrix
        {
            { 1.0, 3.0, 5.0 },
            { 7.0, 1.0, 5.0 }
        };

今のところ、署名付きの通常のコンストラクターがあります

public Matrix(double[,] inputArray){...}

このような呼び出しを受け入れる

var m1 = new Matrix(new double[,]
        {
            { 1.0, 3.0, 5.0 },
            { 7.0, 1.0, 5.0 }
        });

IEnumerable<double[]>および、インターフェイスを継承し、public voidAdd(double[] doubleVector)メソッドを実装することにより、次の使用を受け入れるオブジェクト初期化子

var m2 = new Matrix
        {
            new [] { 1.0, 3.0, 5.0 },                
            new [] { 7.0, 1.0, 5.0 }
        };

Addオブジェクト初期化子を使用しようとすると、X個の引数を取る ためのオーバーロードがないというコンパイラエラーが発生します。ここで、Xは作成しようとしている列の数です(つまり、提供された例3)。

提供したような引数を受け取るようにクラスを設定するにはどうすればよいですか?

4

1 に答える 1

5

Addキーワードを使用してメソッドを定義しparams、行列の幅よりも長い配列の終了要素を無視します

public void Add(params double[] doubleVector)
{
   // code
}

配列が短い場合、デフォルトの要素は残されます ( 0)

// sample
var M = new Matrix()
{
    { 1.2, 1.0 },
    { 1.2, 1.0, 3.2, 3.4}
};
于 2015-10-28T12:53:02.640 に答える