C#控制台列格式化和定位

时间:2014-11-27 04:00:17

标签: c# console

我在控制台应用中遇到了关于列格式的几个问题。我的代码和输出如下。

  1. 为什么在第一个asdf之前有空格?
  2. 为什么guid不像其他行一样排列?
  3. 3.当我指定{0,5}时,它会在第7个字符列之后开始打印吗?

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Person person = new Person { Id = Guid.NewGuid(), Name = "John", Email = "John@example.com", Phone = "123456789" };
                Console.WriteLine("{0} DETAILS", person.Name.ToUpper());
                Console.WriteLine("{0,5} {1,5}", "asfd", "asdf");
                Console.WriteLine("Id: {0,5}", person.Id.ToString());
                Console.WriteLine("Name: {0,5}", person.Name);
                Console.WriteLine("Phone: {0,5}", person.Phone);
                Console.WriteLine("Email: {0,5}", person.Email);
                Console.ReadKey();
            }
    
            public class Person
            {
                public Guid Id { get; set; }
                public string Name { get; set; }
                public string Email { get; set; }
                public string Phone { get; set; }
            }
        }
    }
    

    我的控制台输出:

    JOHN DETAILS
     asfd  asdf
    Id: 21257c7f-dae0-4876-91bb-0fe88d926500
    Name:  John
    Phone: 123456789
    Email: John@example.com
    

2 个答案:

答案 0 :(得分:3)

  

为什么在第一个asdf之前有一个空格?

因为,5中的{0,5}表示"对齐5个字符"," asfd"只有4个字符,因此空格用于填充。

  

为什么guid不像其他行一样排列?

您正在尝试对齐超过5列的整个ID,并且许多字符不能适应"分为5列。

  

为什么我指定{0,5}它会在第7个字符列之后开始打印?

你在哪里看到这种情况发生了?

我认为你想要的是将所有内容对齐,所以你可以这样做:

Console.WriteLine("{0,5}: {1}", "Id", person.Id.ToString());
Console.WriteLine("{0,5}: {1}", "Name", person.Name);
Console.WriteLine("{0,5}: {1}", "Phone", person.Phone);
Console.WriteLine("{0,5}: {1}", "Email", person.Email);

这会将所有字段名称对齐在一起。这是有效的,因为最长的字段名称长度为5个字符。您可以将,5更改为其他内容,如果它们全部相同(且长度超过5),则所有字段名称将通过在左侧填充空格来正确对齐。

您可以在MSDN上阅读有关它的更多信息:http://msdn.microsoft.com/en-us/library/txafckwd%28v=vs.110%29.aspx

答案 1 :(得分:2)

  

为什么在第一个asdf之前有一个空格?

当您执行{0,5}时,5代表的是"在{为"的点开始右对齐文本5个空格。因此,当"asdf"成为" asdf"

  

为什么guid不像其他行一样排列?

因为当你查看你指定的数字时,它会开始左对齐文本,因为文本很长,添加,5什么都不做。

  

为什么我指定{0,5}它会在第7个字符列之后开始打印?

因为,5不知道也不关心之前是什么文字。它只根据放置占位符的位置进行偏移。

有关如何正确对齐的代码示例,请参阅Reticulated answer