-5

以下に示すように、配列内の要素への参照を使用するメソッドを使用して、配列内の値の型を変更しても安全ですか? もしそうなら、どのような種類の値型をこの方法で変更できますか? 単純な値の型に限定されていますか、それともstruct機能しますか?

// Method that sets an integer to x.
void SetToX(ref int element, int x) {
    element = x;
}

// Int array with one element set to 0.
int[] myIntArray = new int[1] {0};

// (Try to) set element 0 of the int array to 1.
SetToX(ref myIntArray[0], 1);

// Will this log "0" or "1"?
Log(myIntArray[0].ToString()); 

Reed Copsey と Alexei Levenkov の厚意による回答

これは問題なく動作します。サンプル コードは "1" を出力します。これは、 を含む任意の値タイプでも機能しますstruct

ただし、これは配列の場合のみです。この方法で別の種類のコレクションを変更しようとすると、次のプロンプトが表示されます。

A property, indexer or dynamic member access may not be passed as an out or ref parameter

これは、要素内の値の型への参照を実際に返すのは配列のみであるためです。他のすべてのコレクションは要素のコピーを返し、ref を使用するとコピーが変更され、オリジナルは変更されません。

4

1 に答える 1

1

はい、これでうまくいきます。

サンプル コードは次のように表示されます。

1

もしそうなら、どのような種類の値型をこの方法で変更できますか? 単純な値の型に限定されていますか、それとも構造体も機能しますか?

任意の値の型。カスタムstructも同じ動作をします。

于 2013-06-12T23:20:00.573 に答える