Хорошо, код, который вы опубликовали (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;
}
(было бы тривиально сделать это универсальным) - однако оригинальная «встроенная» версия (т.е. не метод), работающая с массивом, будет быстрее.