Не очень понял твой подход. Если массив имеет нечётное число строк, тогда массив нужно оставить без изменений.
int length = array.GetLength(0);
int rowLength = array.GetLength(1);
if (length % 2 == 1) return;
// Тут переставляем строки одним единственным циклом с шагом 2.
Кстати, если массив будет рваным array[][], тогда строки будет переставлять проще, так как можно обращаться к строке по одному индексу array[0]. Но не знаю, допустимо ли это.
Знаю что внутри if бред написан( я просто эксперементировал)
using System;
namespace ConsoleApplication
{
class Class
{
static int[,] Input(out int n)
{
Console.Write("введите размерность массива");
n = int.Parse(Console.ReadLine());
int[,] a = new int[n, n];
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
{
Random random = new Random();
a[i, j] = random.Next (-10, 10);
Console.Write("a[{0},{1}]= ", i, j);
}
return a;
}
static void Print(int[,] a)
{
for (int i = 0; i < a.GetLength(0); ++i, Console.WriteLine())
for (int j = 0; j < a.GetLength(1); ++j)
Console.Write("{0,5} ", a[i, j]);
}
static void SwitchRows(int[,] array)
{
var iMax = array.GetLength(0);
var jMax = array.GetLength(1);
if (a[i, j] % 2 != 0)
{
for (int i = 0; i < iMax; i = i + 2)
{
if (i + 1 == iMax)
for (int j = 0; j < jMax; j++)
{
var a = array[i, j];
array[i, j] = array[i + 1, j];
array[i + 1, j] = a;
}
}
else
{
for (int i = 0; i < iMax; i = i + 2)
{
if (i - 1 == iMax)
for (int j = 0; j < jMax; j++)
{
var a = array[i, j];
array[i, j] = array[i + 1, j];
array[i + 1, j] = a;
}
}
}
}
static void Main()
{
int n;
int[,] myArray = Input(out n);
Console.WriteLine("Исходный массив:");
Print(myArray);
SwitchRows(myArray);
Console.WriteLine("Измененныймассив:");
Print(myArray);
}
}
}
}