当我尝试在C#中调整数组的大小时,
Array.Resize(ref Globals.NameList, 0);
我得到以下错误
A property or indexer may not be passed as an out or ref parameter
Globals是一个对象。NameList是在Globals类中声明的字符串类型数组。
请通过发布正确的代码来帮助我解决这个问题。
谢谢!
使用变量,但不使用属性
var obj = Globals.NameList;
Array.Resize(ref obj , 0);
Globals.NameList=obj;
编译器错误不言自明-不能通过引用传递属性;只有一个变量。
来自C#规范第10.6.1.2节:
当形式参数是引用参数时,方法调用中的相应参数必须由关键字
ref
和与形式参数类型相同的变量引用(第5.3.3节)组成。
属性访问表达式不算作变量引用。
你可能想要:
var tmp = Globals.NameList;
Array.Reize(ref tmp, 0);
Globals.NameList = tmp;
请注意,VB确实允许通过引用传递属性,但其行为与上述类似。特别是,方法中的每个赋值只会影响临时值,而不是对相关setter的调用。
还要注意,拥有一个名为Globals
的具有可变公共属性的类是一种设计味道。。。
执行
Array arr = Globals.NameList;
Array.Resize(ref arr, 0);
Globals.NameList = arr;