10

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

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

我收到以下错误

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

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

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

谢谢!

4

3 回答 3

27

使用变量,但不使用属性

var obj = Globals.NameList;
Array.Resize(ref obj , 0);
Globals.NameList=obj;
于 2012-08-01T12:22:37.463 回答
9

编译器错误不言自明——您不能通过引用传递属性;只是一个变量。

从 C# 规范第 10.6.1.2 节:

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

属性访问表达式不算作变量引用

你可能想要:

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

请注意,VB确实允许通过引用传递属性,但它的作用与上述类似。特别是,方法中的每个赋值只会影响一个临时值,而不是对相关设置器的调用。

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

于 2012-08-01T12:23:40.550 回答
0

Array arr = Globals.NameList;
Array.Resize(ref arr, 0);
Globals.NameList = arr;
于 2012-08-01T12:24:42.453 回答