Исключение вне диапазона на визуальной студии Mac, но не на Windows - оба 2017 - PullRequest
0 голосов
/ 15 декабря 2018

Я выполнил следующий метод для центрирования и подчеркивания заголовка в консольном приложении:

public static void ShowTitle(string Title)
    {
        int SpacesBefore = ((Console.BufferWidth - 1) - Title.Length) / 2;
        Console.WriteLine("{0}{1}\n{0}{2}\n", new string(' ', SpacesBefore), Title, new string('=', Title.Length));
    }

, который компилируется и работает в Visual Studio 2017 (windows), но выдает ошибку, которую не удается отладить на Mac,enter image description here

1 Ответ

0 голосов
/ 15 декабря 2018

Проблема предположительно заключается в следующем расчете:

int SpacesBefore = ((Console.BufferWidth - 1) - Title.Length) / 2;

Проблема вызвана одной из двух причин: либо ширина символа консоли (BufferWidth) меньше в MacOS, либо ваш заголовок длиннее,Представьте себе, что Title длина 5 и BufferWidth 10:

SpacesBefore = ((10 - 1) - 5) / 2 = 2

Теперь представьте, что в Mac OS BufferWidth равно 4:

SpacesBefore = ((4 - 1) - 5) / 2 = -1

И теперь вы хотитечтобы использовать это для построения строки: new string(' ', -1), так что вы получите свое исключение.

Быстрое решение может состоять в том, чтобы изменить ваш расчет на это, чтобы гарантировать, что значение всегда> = 0, но я 'Я оставлю вас решать, как это исправить:

int SpacesBefore = Math.Max(0, ((Console.BufferWidth - 1) - Title.Length) / 2);

Я рекомендую узнать, как использовать отладчик , так как проверка значения SpacesBefore, а затем BufferWidth будет иметьпозволил вам быстро найти источник проблемы.

...