C# 在多行上拆分字符串文字会引入不需要的空白

C# 在多行上拆分字符串文字会引入不需要的空白,c#,C#,这将显示第二行文本,前面有大量空白,除非我取消缩进字符串文字并使代码混乱 有没有办法解决这个问题,或者这只是C#如何工作的一个细节?当使用逐字字符串时,每个空格都是重要的。下面的代码并不难看 MessageBox.Show( @"Could not read the Windows Registry. Bailing out...","Registry Error",MessageBoxButtons.OK,MessageBoxIcon.Error); 逐字字

这将显示第二行文本,前面有大量空白,除非我取消缩进字符串文字并使代码混乱


有没有办法解决这个问题,或者这只是C#如何工作的一个细节?

当使用逐字字符串时,每个空格都是重要的。下面的代码并不难看

MessageBox.Show( @"Could not read the Windows Registry.
                 Bailing out...","Registry Error",MessageBoxButtons.OK,MessageBoxIcon.Error);

逐字字符串文字的全部要点是,它还包括字符串中的空格。如果你不想要空白,就不要把它放在字符串中

如果要跨多行拆分字符串而不在字符串本身中包含空格,可以将字符串本身拆分为多个字符串,每个字符串位于一行上,如下所示:

MessageBox.Show( "Could not read the Windows Registry.\n"+
             "Bailing out...","Registry Error",MessageBoxButtons.OK,MessageBoxIcon.Error);

这没什么大不了的,但出于好奇,这是等价的,还是字符串连接是在运行时执行的?Linqpad中的快速测试表明,代码
var mystring=“foo”+“Bar”
有一条加载“fooBar”的
ldstr
指令,因此级联是在编译时完成的,这很有意义,因为它是一个简单的优化。可以想象的是,有时情况并非如此,我没有耐心查看编译器规范来确定答案。我相信如果你把它作为一个问题来问,你会发现比我更有知识的人会找到一个规范参考(或者你可能会发现有人已经问过了)。
MessageBox.Show( @"Could not read the Windows Registry."+
                 "Bailing out...","Registry Error",MessageBoxButtons.OK,MessageBoxIcon.Error);