J'utilise des propriétés auto-implémentées. Je suppose que le moyen le plus rapide de remédier à ce problème est de déclarer ma propre variable de support ?
public Point Origin { get; set; }
Origin.X = 10; // fails with CS1612
Message d'erreur : Impossible de modifier la valeur de retour de 'expression' car ce n'est pas une variable
Une tentative a été faite pour modifier un type de valeur qui était le résultat d'une expression intermédiaire. Comme la valeur n'est pas persistée, elle restera inchangée.
Pour résoudre cette erreur, stockez le résultat de l'expression dans une valeur intermédiaire, ou utilisez un type de référence pour l'expression intermédiaire.
14 votes
C'est une autre illustration de la raison pour laquelle les types de valeurs mutables sont une mauvaise idée. Si vous pouvez éviter de muter un type de valeur, faites-le.
0 votes
Prenez le code suivant (issu de mes efforts d'implémentation d'AStar blogué par un certain EL :-), qui ne pouvait pas éviter de changer un type de valeur : class Path<T> : IEnumerable<T> où T : INode, new() {...} public HexNode(int x, int y) : this(new Point(x, y)) {} Path<T> path = new Path<T>(new T(x, y)) ; // Error // Ugly fix Path<T> path = new Path<T>(new T()) ; path.LastStep.Centre = new Point(x, y) ;