我明白规则。但谁知道这是为什么?为什么我无法将索引器作为ref参数传递?
如果我的代码是:
List<T> x = new List<T>;
x.Add(new T());
x.Add(new T());
x.Add(new T());
int y = 2;
//And I call a method
M1(ref x[y]);
裁判X [Y]只是一个指针,我感兴趣的T实例,不是吗?
为什么我不能以非常简单的方式编写代码行称为M1()。
。
我知道了解决方法:
T cX = x[y];
M1(ref cX);
我希望听到的,为什么C#的建筑师需要这个额外的步骤来传递一个指针?还是它是一个编译器限制?
'ref'和'out'适用于位置,而不是值。 'x [y]'是类型'T'的值,但'cX'是包含'T'的位置。 – Lee
有一个[很多问题](http://stackoverflow.com/questions/529782/c-sharp-property-and-ref-parameter-why-no-sugar)已经有关于此。看看这个链接的第二个答案。 – Jonesopolis