usar tag propiedades propiedad esperaba descriptores como acceso c# .net struct pass-by-reference

c# - tag - Un acceso de propiedad, indizador o miembro dinámico no se puede pasar como un parámetro de salida o ref



se esperaba un descriptor de acceso get o set c# (2)

Hola, estoy teniendo problemas para resolver esto. Tengo estas estructuras y clases.

struct Circle { ... } class Painting { List<Circle> circles; public List<Circle> circles { get { return circles; } } }

Estoy tratando de modificar uno de los círculos dentro de la clase de pintura desde afuera, usando este código:

MutatePosition(ref painting.Circles[mutationIndex], painting.Width, painting.Height);

Esta línea me está dando un error de compilación:

Un acceso de propiedad, indizador o miembro dinámico no se puede pasar como un parámetro de salida o ref

¿Por qué es esto y qué puedo hacer para resolverlo sin cambiar demasiado mi código?


El error es bastante claro: no se puede pasar una propiedad a un parámetro ref de un método.

Necesitas hacer un temporal:

var circle = painting.Circles[mutationIndex]; MutatePosition(ref circle, painting.Width, painting.Height); painting.Circles[mutationIndex] = circle;

Dicho esto, las estructuras mutables a menudo son una mala idea. Es posible que desee considerar hacer de esto una clase en lugar de una estructura.


Si solo hay un parámetro de referencia y ningún tipo de devolución para MutatePosition, puede devolver el valor.

painting.Circles[mutationIndex] = MutatePosition(circle, painting.Width, painting.Height);

Si hay varios parámetros de referencia y / o un tipo de devolución, puede crear un nuevo tipo que incluya todo lo que debe devolverse.

class MutateResults() { Circle Circle; object OtherReffedStuff; }