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)
Esta pregunta ya tiene una respuesta aquí:
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; }