Я применил следующий метод для центрирования и подчеркивания заголовка в консольном приложении:
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.






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