Подтвердить что ты не робот

Существует ли общий метод подкачки в структуре?

Существует ли такой способ в любом месте в рамках?

public static void Swap<T>(ref T left, ref T right) {
    T temp;
    temp = left;
    left = right;
    right = temp;
}

Если нет, то почему?

4b9b3361

Ответ 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