1

私はこのコードを持っています

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 引数は割り当て可能な変数でなければなりません

私は何をすべきですか?

4

2 に答える 2

2

その方法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;
}
于 2012-06-06T17:10:51.780 に答える
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[]は、別の配列を作成する必要があります。

于 2012-06-06T17:12:37.000 に答える