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

Can*_*ate 15 .net c# struct pass-by-reference

你好,我很难搞清楚这一点.我有这些结构和类.

struct Circle
{ ... }

class Painting
{
     List<Circle> circles;

     public List<Circle> circles
     {
          get { return circles; }
     }
}
Run Code Online (Sandbox Code Playgroud)

我试图使用以下代码从外部修改绘画类中的一个圆圈:

MutatePosition(ref painting.Circles[mutationIndex], painting.Width, painting.Height);
Run Code Online (Sandbox Code Playgroud)

这行给了我一个编译器错误:

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

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

Ree*_*sey 33

错误很明显 - 您无法将属性传递给方法的ref参数.

你需要做一个临时的:

var circle = painting.Circles[mutationIndex];
MutatePosition(ref circle, painting.Width, painting.Height);
painting.Circles[mutationIndex] = circle;
Run Code Online (Sandbox Code Playgroud)

话虽这么说,可变结构通常是一个坏主意.您可能想要考虑将其设为类而不是结构.