Исключение вне диапазона на визуальной студии Mac, но не на Windows - оба 2017

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

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.

1 ответ

Решение

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

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 позволил бы вам быстро найти источник проблемы.

Другие вопросы по тегам