Существует ли такой способ в любом месте в рамках?
public static void Swap<T>(ref T left, ref T right) {
T temp;
temp = left;
left = right;
right = temp;
}
Если нет, то почему?
Ответ 1
Существует Interlocked.Exchange. Это делает это в потокобезопасном атомном вызове.
Изменить после комментариев:
Чтобы уточнить, как это работает с помощью Interlocked.Exchange, вы должны:
left = Interlocked.Exchange(ref right, left);
Это будет эквивалентно (по сути):
Swap(ref left, ref right);
Однако Interlocked.Exchange делает это как атомную операцию, поэтому она потокобезопасна.
Ответ 2
Нет, структура не имеет такого метода. Вероятно, причина в том, что у него нет большой выгоды, чтобы она была встроена, и вы могли бы очень легко (как вы это сделали) добавить ее самостоятельно. Это также требует использования параметра ref в качестве параметра, что значительно ограничит использование. Например, вы не могли этого сделать:
List<int> test;
// ...
Swap(ref test[0], ref test[1]); // won't work, it an indexer, not an array