我有这个代码

public MyResponse innerFunc(ref MyElem[]);
public IResponse myFunc(ref IElem[] myElem)
{
     return this.innerFunc(ref (A_CAST_OR_SOMETHING) myElem);
}


哪里


MyResponse:IResponse
MyElem:IElem
A_CAST_OR_SOMETHING应该是MyElem []


当我这样做时

public IResponse myFunc(ref IElem[] myElem)
{
     return this.innerFunc(ref ((MyElem[]) myElem));
}


编译器高亮括号(仅括弧)并说:


  ref或out参数必须是可分配的变量


我该怎么办?

最佳答案

refout的工作方式,您必须直接将作为该参数传递的内容分配给它。简而言之,它必须能够出现在=符号的左侧。由于您无法执行此操作:

((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;
}

10-06 07:43