visual studio Mac 上的超出范围异常但 vs windows 上没有 - 都是 2017

Out of range exception on visual studio Mac but not on vs windows - both 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 上调试的错误。

问题大概在于这个计算:

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

问题是由以下两种情况之一引起的:MacOS 上的控制台字符宽度 (BufferWidth) 较小,或者您的标题较长。假设 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);

我推荐learning how to use the debugger,因为检查SpacesBefore的值,然后BufferWidth可以让您快速定位问题的根源。