我在控制台应用中遇到了关于列格式的几个问题。我的代码和输出如下。
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
答案 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。