如何使用Console.WriteLine在列中alignment文本?

我有一种列显示,但最后两列似乎没有正确alignment。 这是我现在的代码:

Console.WriteLine("Customer name " + "sales " + "fee to be paid " + "70% value " + "30% value"); for (int DisplayPos = 0; DisplayPos < LineNum; DisplayPos = DisplayPos + 1) { seventy_percent_value = ((fee_payable[DisplayPos] / 10.0) * 7); thirty_percent_value = ((fee_payable[DisplayPos] / 10.0) * 3); Console.WriteLine(customer[DisplayPos] + " " + sales_figures[DisplayPos] + " " + fee_payable[DisplayPos] + " " + seventy_percent_value + " " + thirty_percent_value); } 

我是一个菜鸟程序员,所以我可能不明白所有的build议,但如果您有任何意见,将不胜感激!

不要试图手动将文本与任意空格stringalignment,应该将实际的制表符( \t转义序列)embedded到每个输出string中:

 Console.WriteLine("Customer name" + "\t" + "sales" + "\t" + "fee to be paid" + "\t" + "70% value" + "\t" + "30% value"); for (int DisplayPos = 0; DisplayPos < LineNum; DisplayPos++) { seventy_percent_value = ((fee_payable[DisplayPos] / 10.0) * 7); thirty_percent_value = ((fee_payable[DisplayPos] / 10.0) * 3); Console.WriteLine(customer[DisplayPos] + "\t" + sales_figures[DisplayPos] + "\t" + fee_payable + "\t\t" + seventy_percent_value + "\t\t" + thirty_percent_value); } 

尝试这个

 Console.WriteLine("{0,10}{1,10}{2,10}{3,10}{4,10}", customer[DisplayPos], sales_figures[DisplayPos], fee_payable[DisplayPos], seventy_percent_value, thirty_percent_value); 

其中大括号内的第一个数字是索引,第二个是alignment。 第二个数字的符号表示string是左alignment还是右alignment。 左alignment使用负数。

或者看看http://msdn.microsoft.com/en-us/library/aa331875(v=vs.71).aspx

只是加上roya的答案。 在c#6.0中,你现在可以使用string插值:

 Console.WriteLine($"{customer[DisplayPos],10}" + $"{salesFigures[DisplayPos],10}" + $"{feePayable[DisplayPos],10}" + $"{seventyPercentValue,10}" + $"{thirtyPercentValue,10}"); 

这实际上可以是一条线,没有额外的美元,我只是觉得这样做比较容易阅读。

而且你也可以在System.Console上使用一个静态导入,这样你就可以做到这一点:

 using static System.Console; WriteLine(/* write stuff */); 

我知道,非常老的线程,但提出的解决scheme并不是完全自动的,当周围有更长的string。

因此,我创build了一个完全自动化的小型辅助方法。 只需传入一个string数组的列表,其中每个数组代表一个行和数组中的每个元素,以及该行的一个元素。

该方法可以像这样使用:

 var lines = new List<string[]>(); lines.Add(new[] { "What", "Before", "After"}); lines.Add(new[] { "Name:", name1, name2}); lines.Add(new[] { "City:", city1, city2}); lines.Add(new[] { "Zip:", zip1, zip2}); lines.Add(new[] { "Street:", street1, street2}); var output = ConsoleUtility.PadElementsInLines(lines, 3); 

帮手方法如下:

 public static class ConsoleUtility { /// <summary> /// Converts a List of string arrays to a string where each element in each line is correctly padded. /// Make sure that each array contains the same amount of elements! /// - Example without: /// Title Name Street /// Mr. Roman Sesamstreet /// Mrs. Claudia Abbey Road /// - Example with: /// Title Name Street /// Mr. Roman Sesamstreet /// Mrs. Claudia Abbey Road /// <param name="lines">List lines, where each line is an array of elements for that line.</param> /// <param name="padding">Additional padding between each element (default = 1)</param> /// </summary> public static string PadElementsInLines(List<string[]> lines, int padding = 1) { // Calculate maximum numbers for each element accross all lines var numElements = lines[0].Length; var maxValues = new int[numElements]; for (int i = 0; i < numElements; i++) { maxValues[i] = lines.Max(x => x[i].Length) + padding; } var sb = new StringBuilder(); // Build the output bool isFirst = true; foreach (var line in lines) { if (!isFirst) { sb.AppendLine(); } isFirst = false; for (int i = 0; i < line.Length; i++) { var value = line[i]; // Append the value with padding of the maximum length of any value for this element sb.Append(value.PadRight(maxValues[i])); } } return sb.ToString(); } } 

希望这有助于某人。 来源于我的博客文章: http : //dev.flauschig.ch/wordpress/?p=387

您可以使用制表符而不是列之间的空格,和/或为格式string中的列设置最大大小…