在数组调整大小时,属性或索引器不能作为out或ref参数传递

时间:2012-08-01 12:20:45

标签: c#

当我尝试在C#中调整数组大小时,如下所示

Array.Resize(ref Globals.NameList, 0);

我收到以下错误

A property or indexer may not be passed as an out or ref parameter

Globals是一个对象。 NameList是在Globals Class中声明的字符串类型数组。

请通过发布正确的代码来帮助我解决此问题。

谢谢!

3 个答案:

答案 0 :(得分:22)

使用变量,但不是属性

var obj = Globals.NameList;
Array.Resize(ref obj , 0);
Globals.NameList=obj;

答案 1 :(得分:8)

编译器错误不言而喻 - 您无法通过引用传递属性;只是一个变量。

来自C#规范部分10.6.1.2:

  

当形式参数是引用参数时,方法调用中的相应参数必须包含关键字ref,后跟变量引用(第5.3.3节)与形式参数相同的类型。

属性访问表达式不计为变量引用

你可能想要:

var tmp = Globals.NameList;
Array.Reize(ref tmp, 0);
Globals.NameList = tmp;

请注意,VB 允许允许通过引用传递属性,但它的行为与上面类似。特别是,方法中的每个赋值只会影响临时值,而不是对相关setter的调用。

另请注意,拥有一个名为Globals且具有可变公共属性的类是设计气味......

答案 2 :(得分:0)

DO

Array arr = Globals.NameList;
Array.Resize(ref arr, 0);
Globals.NameList = arr;