Вопрос: Как сделать вывод в цикле один раз?

Лучший ответ:
int[,] a = { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
bool s = true;
for (int i = 0; s && i < a.GetLength(0); ++i)
  for (int j = 0; s && j < a.GetLength(1); ++j)
    s = s && a[i, j] == a[j, i];
Console.WriteLine(s ? "Симметрична" : "Ne simmetrichna");

Худший ответ:
ну тогда уж:int[,] a = { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
bool s = true;
for (int i = 0; i < a.GetLength(0) && s; ++i)
  for (int j = 0; j < a.GetLength(1) && s; ++j)
    s &= a[i, j] == a[j, i];
Console.WriteLine(s ? "Симметрична" : "Ne simmetrichna");
при этом можно и просто присваивать контрольке значениеint[,] a = { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
bool s = true;
for (int i = 0; i < a.GetLength(0) && s; ++i)
  for (int j = 0; j < a.GetLength(1) && s; ++j)
    s = a[i, j] == a[j, i];
Console.WriteLine(s ? "Симметрична" : "Ne simmetrichna");
а можно проверять квадратность матрицы до начала циклов, а так же перебирать "треугольник"spoilerusing System;

namespace simm_array
{
    class Program
    {
        static void Main(string[] args)
        {
            var m = new int[,] { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
            var w = m.GetLength(0);
            var h = m.GetLength(1);
            var s = w == h;
            for (var x = 0; x < w && s; ++x)
                for (var y = x; y < h && s; ++y)
                    s = m[x, y] == m[y, x];
            Console.WriteLine(s ? "Симметрична" : "Ne simmetrichna");
        }
    }
}
в каментах предложено не сканировать главную диагональ.. и это логично! )) .. ну собственно и просто делаетсяspoilerusing System;

namespace simm_array
{
    class Program
    {
        static void Main(string[] args)
        {
            var m = new int[,] { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
            var w = m.GetLength(0);
            var h = m.GetLength(1);
            var s = w == h;
            for (var x = 0; x < w && s; ++x)
                for (var y = x + 1; y < h && s; ++y)
                    s = m[x, y] == m[y, x];
            Console.WriteLine(s ? "Симметрична" : "Ne simmetrichna");
        }
    }
}
ну и немного функционального стиля+синтаксического сахара spoilerusing System;

namespace simm_array
{
    static class Program
    {
        static void Main(string[] args)
        {
            var m = new int[,] { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
            m.dump();
            m.isSymmetrical().report();
        }

        static bool isSymmetrical(this int[,] m)
        {
            var w = m.GetLength(0);
            var h = m.GetLength(1);
            var s = w == h;
            for (var x = 0; x < w && s; x++)
                for (var y = x + 1; y < h && s; y++)
                    s = m[x, y] == m[y, x];
            return s;
        }

        static void dump(this int[,] m)
        {
            var w = m.GetLength(0);
            var h = m.GetLength(1);
            for (var x = 0; x < w; x++)
            {
                for (var y = 0; y < h; y++)
                {
                    Console.Write($"\t{m[x, y]}");
                }
                Console.WriteLine();
            }
            Console.WriteLine();
        }

        static void report(this bool s) => Console.WriteLine(s ? "Симметрична" : "Ne simmetrichna");
    }
}
выхлоп