Может быть, я чего-то здесь упускаю, но, скажем, у вас есть два массива, представляющих ваши строки и столбцы соответственно, и предполагается, что это симметрично (как вы говорите):
int dimension = rows.Length;
for(int i=0; i<dimension; i++)
{
int j = (dimension-1) - i; //need dimension-1 to avoid an off-by-one error
DoSomething(matrix[i][j]);
DoSomehting(matrix[j][i]);
}
Это решение обладает преимуществом сложности среды выполнения, заключающимся в том, что итерация выполняется только в одном цикле, а не в двух.