您好我无法搞清楚这一点。我有这些结构和类。
struct Circle
{ ... }
class Painting
{
List<Circle> circles;
public List<Circle> circles
{
get { return circles; }
}
}
我正在尝试使用以下代码修改绘画类中的一个圆圈:
MutatePosition(ref painting.Circles[mutationIndex], painting.Width, painting.Height);
这一行给了我一个编译错误:
属性,索引器或动态成员 访问权限不能作为out或 ref参数
为什么会这样,如果不过多地改变我的代码,我该怎么做才能解决它?
答案 0 :(得分:33)
错误很明显 - 您无法将属性传递给方法的ref参数。
你需要做一个临时的:
var circle = painting.Circles[mutationIndex];
MutatePosition(ref circle, painting.Width, painting.Height);
painting.Circles[mutationIndex] = circle;
话虽如此,可变结构通常是一个坏主意。您可能需要考虑将其设为类而不是结构。
答案 1 :(得分:2)
如果MutatePosition只有一个ref参数且没有返回类型,则可以返回该值。
painting.Circles[mutationIndex] = MutatePosition(circle, painting.Width, painting.Height);
如果有多个ref参数和/或已经是返回类型,您可以创建一个包含需要返回的所有内容的新类型。
class MutateResults() { Circle Circle; object OtherReffedStuff; }