属性,索引器或动态成员访问不能作为out或ref参数传递

时间:2011-01-27 06:13:25

标签: c# .net struct pass-by-reference

您好我无法搞清楚这一点。我有这些结构和类。

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参数

为什么会这样,如果不过多地改变我的代码,我该怎么做才能解决它?

2 个答案:

答案 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; }