Je viens de tomber sur ce message d'erreur tout en travaillant en C#
Une propriété ou d'indexation ne peut être adopté comme une sortie ou paramètre de référence
J'ai connu ce qui a causé cela et n'a la solution rapide de créer une variable locale de type approprié, l'appel de la fonction avec comme l' out
/ref
paramètre et en l'affectant de retour à la propriété:
RefFn(ref obj.prop);
se transforme en
{
var t = obj.prop;
RefFn(ref t);
obj.prop = t;
}
Clairement, ce serait un échec si la propriété ne prend pas en charge get et set dans le contexte actuel.
Pourquoi ne pas C# juste faire ça pour moi?
Le seul cas où, je pense, d'où cela peut causer des problèmes sont les suivants:
- filetage
- exceptions
Pour le filetage de cette transformation affecte lorsque les écritures arriver (après l'appel de la fonction, par opposition à l'appel de la fonction), mais je soupçonne plutôt de n'importe quel code qui compte sur qui serait peu de sympathie quand il se casse.
Pour les exceptions, le problème serait à ce qui se passe si la fonction attribue à l'un de plusieurs ref
paramètres de jette? Toute solution triviale entraînerait tous ou aucun des paramètres assignés à quand certains et certaines ne devrait pas être. Encore une fois je ne pense pas que ce serait en faveur de l'utilisation de la langue.
Note: j'ai compris la mécanique de pourquoi ce message d'erreur est généré. Ce que je cherche est la raison pour laquelle C# n'a pas automatiquement la mise en oeuvre de la solution triviale.