public Cube <T> Move(string m) { var cube = (T[, , ])_cube.Clone(); for (byte i = 0; i < 3; i++) { for (byte j = 0; j < 3; j++) { for (byte k = 0; k < 6; k++) { var(i2, j2, k2) = Move((i, j, k), m); cube[i2, j2, k2] = _cube[i, j, k]; } } } return(new Cube <T>(cube)); }