如何在 "@..." C# 字符串中写入制表符(\t)?

8

可能是重复问题:
C# @“” 如何插入制表符?

我想使用键盘上的制表键,但编译器将制表符解释为空格。使用\t也不起作用,它会按字面意义解释为\t。这不可能吗?还是我漏掉了什么?

string str = @"\thi";
MessageBox.Show(str); // Shows "\thi"

现在你知道 @ 的限制了 :-) - xanatos
1
我无法回答,因为这已被标记为重复问题,但您可以轻松使用解释性和逐字字符串:string str = $@"{"\t"}hi"; - Esteban
5个回答

13
将你的字符串分割,并在需要的地方插入 \t
var str = @"This is a" + "\t" + @"tab";

1
我有点知道我可以这样做。我的问题是是否可能将其写入和@"..."字符串中。 - Ahmet
我非常兴奋,因为我的XML行列表可以在我的C#代码中漂亮地缩进,但现在它们不能了:( - Ahmet
这不是违背 @ 的定义吗?话虽如此,在 VS2010 中,如果您从富文本应用程序复制到剪贴板,并且该内容中有一个制表符,我相信它将被粘贴到 VS2010 编辑器中。 - Aaron Anodide
@Gabriel:你应该将那个作为答案发布。那真的有效!!!你也可以从记事本中复制和粘贴选项卡。这样我就可以让我的文本行看起来很好地缩进。 - Ahmet
@Ahmet 当涉及到源代码控制、他人的编辑器和偏好等方面时,这可能会带来麻烦。 - Adam Lear

7
一个verbatim string literal的重点在于,转义被关闭,因此反斜杠可以按照写入时的方式进行读取。如果你想要转义,则使用常规字符串文字(不带@符号)。
当然,你也可以将字面制表符(通过按制表键)放入字符串中。

6
另一个选项是在string.Format中指定选项卡作为参数:
string.Format(@"XX{0}XX", "\t"); // yields "XX    XX"

3

您正在使用 字符串字面量

相反,只需执行以下操作:

string str = "\thi";
MessageBox.Show(str);

2
你也在使用字符串字面量。不同之处在于你没有使用verbatim字符串字面量。 - Paul Ruane

3
在VS2010中,如果您从一个富文本应用程序复制到剪贴板,并且该内容包含一个制表符,我相信它将粘贴到VS2010编辑器中。我认为这是有些错误的,而且将来行为可能会发生改变。

它确实回答了我的问题。 - Ahmet
3
值得注意的是,插入空格的不是编译器,而是Visual Studio编辑器中的默认设置。可以在“工具”->“选项”下关闭该设置。 - Mark Peters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接