Bueno, el código que ha publicado (ref cards[n]
) sólo puede trabajar con una matriz (no una lista) - pero usted podría utilizar simplemente (donde foo
y bar
son los dos valores):
static void Swap(ref int foo, ref int bar) {
int tmp = foo;
foo = bar;
bar = tmp;
}
O posiblemente (si quieres atómica):
Interlocked.Exchange(ref foo, ref bar);
Personalmente, no creo que me moleste con un método de intercambio, simplemente hazlo directamente; esto significa que se puede utilizar (ya sea de una lista o de una matriz):
int tmp = cards[n];
cards[n] = cards[i];
cards[i] = tmp;
Si realmente quería escribir un método de intercambio que funcionaba en cualquiera de una lista o una matriz, que tendría que hacer algo como:
static void Swap(IList<int> list, int indexA, int indexB)
{
int tmp = list[indexA];
list[indexA] = list[indexB];
list[indexB] = tmp;
}
(sería trivial para hacer de este genérico) - sin embargo, la versión original "en línea" (es decir, no es un método) que trabajan en una matriz será más rápido.
Interlocked.Exchange? – Svish
¿Cómo funcionaría con una matriz? – Svish
Golpee el intercambio ... –