C# 中逐字字符串的多行格式(前缀为 @)
我喜欢在 C# 中使用 @"strings",尤其是当我有很多多行文本时。唯一的烦恼是,在执行此操作时,我的代码格式会变得很糟糕,因为第二行和更多行被完全推到左侧,而不是使用我格式精美的代码的缩进。我知道这是设计使然,但是是否有一些选项/黑客方法可以允许这些行缩进,而不在输出中添加实际的制表符/空格?
添加示例:
var MyString = @" this is
a multi-line string
in c#.";
我的变量声明缩进到“正确”的深度,但是字符串中的第二行和更多行被推到左边距 - 所以代码有点难看。您可以将制表符添加到第 2 行和第 3 行的开头,但字符串本身将包含这些制表符...有意义吗?
I love using the @"strings" in c#, especially when I have a lot of multi-line text. The only annoyance is that my code formatting goes to doodie when doing this, because the second and greater lines are pushed fully to the left instead of using the indentation of my beautifully formatted code. I know this is by design, but is there some option/hack way of allowing these lines to be indented, without adding the actual tabs/spaces to the output?
adding example:
var MyString = @" this is
a multi-line string
in c#.";
My variable declaration is indented to the "correct" depth, but the second and further lines in the string get pushed to the left margin- so the code is kinda ugly. You could add tabs to the start of line 2 and 3, but the string itself would then contain those tabs... make sense?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
字符串扩展怎么样?更新:我重新阅读了您的问题,希望有更好的答案。这也是让我烦恼的事情,必须按如下方式解决它是令人沮丧的,但从好的方面来说它确实有效。
以及一个示例控制台程序:
以及输出:
如果您决定走这条路线,那么还有一种更简洁的使用方式:
How about a string extension? Update: I reread your question and I hope there is a better answer. This is something that bugs me too and having to solve it as below is frustrating but on the plus side it does work.
And an example console program:
And the output:
And a cleaner way to use it if you decide to go this route:
Cymen给出了正确的解决方案。我使用源自 Scala 的 stripMargin() 方法的类似方法。我的扩展方法如下所示:
用法:
结果:
Cymen has given the right solution. I use a similar approach as derived from Scala's stripMargin() method. Here's what my extension method looks like:
Usage:
Result:
对于 C# 11,您现在可以使用 原始字符串文字。
输出是:
它还与字符串插值结合:
with C# 11 you can now use raw string literals.
The output is:
It also combines with string interpolation:
我想不出完全满足您问题的答案,但是您可以编写一个函数,从字符串中包含的文本行中去除前导空格,并在每次创建此类字符串时调用它。
是的,这是一个黑客攻击,但您在问题中指定了接受黑客攻击。
I can't think of an answer that would completely satisfy your question, however you could write a function that strips leading spaces from lines of text contained in a string and call it on each creation of such a string.
Yes it is a hack, but you specified your acceptance of a hack in your question.
这是一个较长的解决方案,它试图尽可能地模仿
textwrap.dedent
。第一行保持原样,预计不会缩进。 (您可以使用 doctest-csharp 基于 doctest 生成单元测试。)Here is a longish solution which tries to mimic
textwrap.dedent
as much as possible. The first line is left as-is and expected not to be indented. (You can generate the unit tests based on the doctests using doctest-csharp.)