当我把\ t放在console.writelin()
它没有工作
if (reader.HasRows)
{
Console.WriteLine("|{0}|\t|{1}|\t|{2}|\t|{3}|\t|{4}|", reader.GetName(0),
reader.GetName(1), reader.GetName(2), reader.GetName(3), reader.GetName(4));
while (reader.Read())
{
Console.WriteLine("|{0}|\t|{1}|\t|{2} EGP|\t|{3} EGP|\t|{4}|", reader.GetString(0),
reader.GetInt32(1), reader.GetInt32(2), reader.GetInt32(3), reader.GetString(4));
}
}
结果是::
|Product Name| |Quantity| |price per item | |Total| |Code|
|a| |1| |0 EGP| |1 EGP| |12|
即使我使用{0,10}
或{0,-10}
也无效
答案 0 :(得分:3)
是的,它的工作。 您可以将标签视为列标记。因此,当您放置一个\ t时,您要对控制台说:跳转到下一个可用的列标记。在标题'产品名称'已经撤消了第一个选项卡列,因此当Console进程\ t时,它会跳转到第二列。相反,在数据中,' a'是小的,可以跳到第一列。
这将以正确的格式输出:
Console.WriteLine(string.Format("|{0,-15}|", "Product Name"));
Console.WriteLine(string.Format("|{0,-15}|", "a"));
看到它正常工作
答案 1 :(得分:2)
\t
做了什么?
它将光标移动到下一列是8的倍数。
这正是您的示例中发生的事情。也许不是你想要的,但绝对是你要求的。 ;)
答案 2 :(得分:1)
\ t真的在这里工作。但是你期待别的东西。如果你能提到你期望的输出类型。这很容易帮助。
编辑:下面的代码会像你预期的那样创建表格的标题。调整{}内的第二个数字以适合您的列宽。
Console.WriteLine(string.Format("|{0,-20}|{1,-20}|{2,-20}|{3,-20}|{4,-20}|", "Product Name", "Quantity", "Price per item", "Total", "Code"));
答案 3 :(得分:0)
权宜之计措施,如果您知道列的长度,则使用string.PadRight
。但它很乱:
Console.WriteLine("{0}{1}{2}{3}{4}",
("|" + reader.GetString(0) + "|").PadRight(20, ' '),
("|" + reader.GetInt32(1) + "|").PadRight(20, ' ')
("|" + reader.GetInt32(2) + "EGP|").PadRight(20, ' ')
("|" + reader.GetInt32(3) + "EGP|").PadRight(20, ' ')
("|" + reader.GetString(4) + "|").PadRight(20, ' '));
尽管将其放入单独的方法中是直截了当的。
如果您真的想使用\t
,那么您可以编写一个单独的方法来计算要添加的标签数量。您需要再次知道每个字段的长度:
string ToTabColumn(string text, int length)
{
int tabSize = 8; // no easy way of getting environment tab length
int colSize = text.Length + Convert.ToInt32(Math.Ceil((double)(length - text.Length) / tabSize));
return text.PadRight(colSize, '\t');
}