【问题标题】:new line in a multi-line string多行字符串中的新行
【发布时间】:2011-02-07 09:07:15
【问题描述】:

试图覆盖我的一个类中的 tostring。

 return string.Format(@" name = {0}
                         ID = {1}
                         sec nr = {2}
                         acc nr = {3}", string, int, int ,int); // types

但问题是,打印出来的结果并没有对齐:

name = test
                                   ID = 42
                                   sec nr = 11
                                   acc nr = 55

尝试添加 \n 只是将其打印出来而不进行格式化。猜测它与我用于多衬里的 @"" 有关。

想要打印出来:

name = test
ID = 42
sec nr = 11
acc nr = 55

【问题讨论】:

    标签: c# string multiline


    【解决方案1】:

    如果你在前面添加空格,它将以这种方式打印。

    我通常是这样做的。

       return string.Format(
    @" name = {0}
     ID = {1}
     sec nr = {2}
     acc nr = {3}", string, int, int ,int); // types
    

    更新:也许是更漂亮的选择:

    string[] lines = 
    {
      " name = {0}",
      " ID = {1}",
      " sec nr = {2}",
      " acc nr = {3}"
    };
    
    return string.Format(
             string.Join(Environment.Newline, lines), 
             arg0, arg1, arg2, arg3);
    

    【讨论】:

    • 这行得通,所以这是一个解决方案,但是没有缩进的代码看起来很丑。有人能做到这一点“更好”吗?
    • @Zka: 不是真的,这几乎是你能买到的最好看的东西:(
    • 感谢您的替代方案,它看起来更好,并且对于我的目的来说非常易于管理。
    • 另一种选择是将常量从代码中重构到资源文件中。这还有一个额外的好处是可以轻松进行多种翻译。
    【解决方案2】:

    字符串前的@关闭标准C#字符串格式,试试

     return string.Format(" name = {0}\n ID = {1} \n sec nr = {2} \n acc nr = {3}", 
                          string, int, int ,int); // types
    

    你不能使用@使用\n、\t等。

    编辑

    这是 - 恕我直言 - 尽善尽美

     return string.Format("name = {0}\n" + 
                          "ID = {1}\n" + 
                          "sec nr = {2}\n" + 
                          "acc nr = {3}", 
                           string, int, int ,int); 
    

    【讨论】:

    • 实际上是的,这行得通,但我真的需要它是多行的,因为要添加更多信息,使它成为一个很长的行。
    • @leppie:抱歉,为什么不支持 Windows?
    • \n 不是 Windows 上的标准换行符。我知道除非你得到它们,否则某些控件将无法工作\n\r。
    • @leppie:谢谢,我主要是服务器端的,所以没有注意到。
    【解决方案3】:

    不,这是你在里面的所有空间。

    【讨论】:

    • +1 无效。这个答案有什么问题?然而,我承认这不仅仅是一个原因,而不是一个解决方案。
    • 是的,应该在这个答案上付出更多的努力。过失。
    【解决方案4】:

    来自 msdn 的解决方案:

    // Sample for the Environment.NewLine property
    using System;
    
    class Sample 
    {
        public static void Main() 
        {
        Console.WriteLine();
        Console.WriteLine("NewLine: {0}  first line{0}  second line{0}  third line",
                              Environment.NewLine);
        }
    }
    /*
    This example produces the following results:
    
    NewLine:
      first line
      second line
      third line
    */
    

    【讨论】:

    • 有趣,我从来没想过
    【解决方案5】:
    String.Join(Environment.NewLine, value.Select(i => i)
    

    其中 values 是字符串的集合

    【讨论】:

      猜你喜欢
      • 2010-12-02
      • 1970-01-01
      • 2013-10-23
      • 1970-01-01
      • 2017-06-13
      • 2012-04-02
      • 2016-04-25
      • 2010-09-12
      相关资源
      最近更新 更多