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