Доступ к свойствам, индексатору или динамическому члену может не передаваться как параметр 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; }