3

ref byte誰かがに変換した経験がありbyte[]ますか?

関数が次のような引数を取る場合

void foo(ref byte buffer);

fooその後、を使用して呼び出すことが可能です

void call_func()
{
    byte arr[] = new byte[10];
    foo(ref arr[0]);
}

buffer問題は、引数をbyte[]で配列に再変換する方法fooです。

4

1 に答える 1

9

あなたはそうしない。

配列全体の固定を回避するために、ランタイムは選択した単一の要素のコピーを作成する場合があります(その後、呼び出し後にコピーし直します)。その場合、関数は一時コピーのアドレスを取得します。これは、他の配列要素のアドレスとは関係ありません。(まあ、いくつかのエイリアシングの考慮事項があるかもしれません、この最適化は、エイリアシング分析がより実行可能であるピンボークおよび/またはリモートコールに対してはるかに可能性が高いです)

配列が必要な場合は、配列を渡します。


正しく機能しない可能性があることを気にしない場合は、安全でないコードを使用して他の要素にアクセスできます。

pinned( byte* p = &buffer ) {
    buffer[4] = 0;
}
于 2012-07-03T13:43:10.583 に答える