10

私は、次のようなことが簡単にできる C++ から来ています。

template<class T>
void Swap(T &a, T &b)
{
  T temp = a;
  a = b;
  b = temp;
}

次に、それを使用してコンテナー内の値を交換します。

std::vector<int> someInts;
someInts.push_back(1);
someInts.push_back(2);

Swap(someInts[0], someInts[1]);

ただし、C#で同じことをしようとすると

void Swap<T>(ref T a, ref T b)
{
        T temp = a;
    a = b;
    b = temp;
}

「プロパティまたはインデクサーが out または ref パラメーターとして渡されない可能性があります」というエラーが表示されます

これはなぜですか、どうすれば克服できますか?

どうもありがとう

4

2 に答える 2

2

インデクサーまたはプロパティ ref パラメーターは使用できません。その理由は、場所ではなくオブジェクトへの参照を返すため、関数が持つ効果は、場所に書き戻さないため、実際にはソースを変更しないためです (つまり、財産)。メソッドが値をインデックスに設定し、どの値を交換するかを知ることができるように、配列をメソッドに渡す必要があります。

于 2011-04-16T13:04:19.407 に答える
0

プロパティとインデクサーは実際にはメソッド (舞台裏でコンパイラーによって作成されます) であるため、それらに対して call-by-reference を実行することはできないと思います。ただし、次のようなメソッドを作成できます。

public void Swap<T>(T[] data, int a, int b) {
  T temp = data[a];
  data[a] = data[b];
  data[b] = temp;
}

Swap(someInts, 0, 1);
于 2011-04-16T13:05:36.350 に答える