Доступ к свойствам, индексатору или динамическому члену может не передаваться как параметр out или ref

Привет, у меня проблемы с этим. У меня есть эти структуры и классы.

struct Circle
{ ... }

class Painting
{
     List<Circle> circles;

     public List<Circle> circles
     {
          get { return circles; }
     }
}

Я пытаюсь изменить один из кругов внутри класса рисования вне его, используя этот код:

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

Эта строка дает мне ошибку компилятора:

Свойство, индексатор или динамический член доступ не может быть передан как выход или параметр ref

Почему это, и что я могу сделать для его решения, не меняя слишком много кода?

Ответы

Ответ 1

Ошибка довольно ясна - вы не можете передать свойство параметру ref метода.

Вам нужно сделать временный:

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

Говоря это, изменчивые структуры часто представляют собой плохую идею. Возможно, вы захотите рассмотреть возможность создания этого класса вместо структуры.

Ответ 2

Если имеется только один параметр ref и тип возврата для MutatePosition, вы можете вернуть значение.

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

Если имеется несколько параметров ref и/или уже тип возврата, вы можете создать новый тип, включающий все, что нужно вернуть.

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