2015-10-28 16 views
5

Ho una classe personalizzata Matrix che vorrei implementare un inizializzatore di oggetto personalizzato simile a quello che un doppio [,] può usare ma non riesce a capire come implementalo.Come implementare un inizializzatore di oggetto personalizzato pulito per una classe Matrix

Idealmente mi piacerebbe averlo assomigliare a questo

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

fin d'ora ho un costruttore di regolare con una firma di

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

che accetta una chiamata del genere

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

e un intializer oggetto che accetta quanto segue utilizzando ereditando lo.210 interfaccia e attuare un vuoto pubblica Add(double[] doubleVector) metodo

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

quando provo usando l'oggetto intializer desidero ottengo un errore del compilatore di non avere un sovraccarico per Add che prende un numero X di argomenti dove X è il numero di colonne che sto cercando di creare (es nei miei esempi forniti 3).

Come posso impostare la mia classe per prendere in un argomento come ho fornito?

risposta

5

definiscono Add metodo con params parola e ignorare elemento dell'array, che è più lungo di larghezza matrice

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

caso di array è più corta, elementi predefiniti sono lasciati (0)

// sample 
var M = new Matrix() 
{ 
    { 1.2, 1.0 }, 
    { 1.2, 1.0, 3.2, 3.4} 
}; 
+0

imparato qualcosa che termina oggi. Grazie per l'aiuto! – PlTaylor

+1

la classe non avrebbe bisogno di implementare IEnumerable per poterlo utilizzare? –

+1

ma la matrice deve avere uguale lunghezza e larghezza –

Problemi correlati