我有这段代码
public MyResponse innerFunc(ref MyElem[]);
public IResponse myFunc(ref IElem[] myElem)
{
return this.innerFunc(ref (A_CAST_OR_SOMETHING) myElem);
}
哪里
当我这样做时
public IResponse myFunc(ref IElem[] myElem)
{
return this.innerFunc(ref ((MyElem[]) myElem));
}
编译器突出显示括号(仅括号)并说:
ref或out参数必须是可赋值变量
我该怎么办?
答案 0 :(得分:2)
ref
和out
的工作方式,您传递的内容必须能够直接分配给该参数。简而言之,它必须能够显示在=
符号的左侧。既然你不能这样做:
((MyElem[])myElem) = foo;
然后你也不能这样做:
foo((MyElem[])myElem);
要解决此问题,您需要引入一个临时变量:
public IResponse myFunc(ref IElem[] myElem)
{
var temp = (MyElem[])myElem;
var response = this.innerFunc(ref temp);
myElem = (IElem[])temp;
return response;
}
答案 1 :(得分:2)
您无法投射ref
个参数。参数的类型必须完全匹配。因此,在这个位置上不可能有铸造操作员。您可以在调用innerFunc
之前创建匹配变量:
public IResponse myFunc(ref IElem[] myElem)
{
MyElem[] p = (MyElem[])myElem;
var result = this.innerFunc(ref p);
myElem = p;
return result;
}
如果参数的实际类型是MyElem[]
,则此方法有效。如果只是IElem[]
,则需要创建一个单独的数组。