Ну, код, который вы выложили (ref cards[n]
) может работать только с массивом (не список) - но вы бы просто использовать (где foo
и bar
являются два значения):
static void Swap(ref int foo, ref int bar) {
int tmp = foo;
foo = bar;
bar = tmp;
}
Или, возможно (если вы хотите атомарный):
Interlocked.Exchange(ref foo, ref bar);
Лично я не думаю, что я потрудился бы с помощью метода свопинга - просто сделайте это прямо; это означает, что вы можете использовать (или для списка или массива):
int tmp = cards[n];
cards[n] = cards[i];
cards[i] = tmp;
Если вы действительно хотите, чтобы написать метод подкачки, который работал на любом списке или массив, вы должны сделать что-то вроде:
static void Swap(IList<int> list, int indexA, int indexB)
{
int tmp = list[indexA];
list[indexA] = list[indexB];
list[indexB] = tmp;
}
(это было бы тривиально, чтобы сделать это родовое) - однако, оригинальная версия «инлайн» (т.е. не метод) работает на массив будет быстрее.
Interlocked.Exchange? – Svish
Как это работает с массивом? – Svish
Забастовка обмена ... –