J'utilise une classe appelée BigNumDesc qui représente un nombre. J'ai un tableau déchiqueté de ces nombres, qui représentent une matrice. Je d'abord déclarer cette matrice de la manière suivante:Types de référence de copie profonde
BigNumDec[][] matrix = new BigNumDec[][] {
new BigNumDec[] { 1, 2 },
new BigNumDec[] { 3, 4 }
};
Maintenant, j'ai cette méthode que je veux appeler:
static BigNumDec[][] GetStrictlyUpperTriangle(BigNumDec[][] matrix)
{
BigNumDec[][] newMatrix = new BigNumDec[matrix.Length][];
matrix.CopyTo(newMatrix, 0);
return null;
}
J'ai un point de rupture dans la dernière ligne. Si dans la fenêtre de surveillance, je prends n'importe quel élément de matrice, et le change, il changera aussi newMatrix, car tous les BigNumDec sont des types de référence (mauvaise décision de conception de la part de son créateur?). Comment puis-je accomplir cela? J'ai besoin d'apporter des modifications à newMatrix, donc je dois le copier d'abord depuis matrix.
edit: Essayé la même chose maintenant avec ints, mais ça se passe tout de même. Je ne le ferais pas avec des types de valeur?
BigNumDec est immuable.
Avec un simple pour cela fonctionne bien avec ints. Cela fonctionnera-t-il bien avec BigNumDec? Je dirais non. –
Cela semble fonctionner. Maintenant, je suis confus. –
Pourriez-vous expliquer pourquoi être immuable ou pas fait une différence ici, si possible? Quand il détecte que je veux changer la valeur, en crée-t-il un nouveau dans les coulisses? –