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
可以让您快速定位问题的根源。
我使用以下方法在控制台应用程序中将标题居中并加下划线:
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
可以让您快速定位问题的根源。