【问题标题】:Formatting C# String格式化 C# 字符串
【发布时间】:2021-01-13 19:25:18
【问题描述】:

我想将有关产品的信息打印到控制台行,我拥有的代码是这样的:

const string format = "[PRODUCT_ID] {0, -10} | [SIZE] {1, -10} | [PRICE] {2, -10}"
foreach (DataRow row in productTable.Rows)
{
    Console.WriteLine(string.Format(format, row["PRODUCT_ID"], row["SIZE"], row["PRICE"]));
}

理想情况下,我希望将所有“|”排成一行,以使预期输出为:

[PRODUCT_ID] 25439  | [SIZE] XS | [PRICE] 34.55 USD

[PRODUCT_ID] 25438  | [SIZE] XL | [PRICE] 27.99 USD

[PRODUCT_ID] 142367 | [SIZE] S  | [PRICE] 27.99 USD

[PRODUCT_ID] 352344 | [SIZE] M  | [PRICE] 12.50 USD

但实际上,控制台中的实际输出如下所示:

[PRODUCT_ID] 25439 | [SIZE] XS | [PRICE] 34.55 USD

[PRODUCT_ID] 25438 | [SIZE] XL | [PRICE] 27.99 USD

[PRODUCT_ID] 142367 | [SIZE] S | [PRICE] 27.99 USD

[PRODUCT_ID] 352344 | [SIZE] M | [PRICE] 12.50 USD

【问题讨论】:

  • 你确定你粘贴的代码实际上是给你输出的东西吗?对齐对我来说很好:see here
  • @IvanKhorin 在字符串格式中指定对齐方式是完全有效的:docs.microsoft.com/en-us/dotnet/api/…你知道作者问题的根本原因可能是什么吗?
  • 问题几乎可以肯定是控制台没有使用固定宽度的字体,这意味着仅用空格填充不会使事情排成一行。您是复制并粘贴了实际结果,还是只是制作了“看起来”像您得到的结果的假结果?
  • 对不起,我的错,第二次尝试我得到了预期的结果。如问题所示,两个结果都是错误的,因此在表格上转换为字符串时可能存在问题。因为我的测试代码适用于整数和字符串列表。也许像row["PRODUCT_ID"].ToString() 一样明确使用.ToString() 是个好主意。
  • @Ctznkane525 不正确:无论列类型如何,从DataRow 转换格式都很好。

标签: c# string string-formatting


【解决方案1】:
const string format = "[PRODUCT_ID] {0} | [SIZE] {1} | [PRICE] {2}";
foreach (DataRow row in productTable.Rows)
{
    Console.WriteLine(string.Format(format, 
        row["PRODUCT_ID"].PadRight(10, ' '),
        row["SIZE"].PadRight(10, ' '),
        row["PRICE"].PadRight(10, ' ')));
}

https://docs.microsoft.com/en-US/dotnet/standard/base-types/padding

【讨论】:

  • 请考虑为您的解决方案添加解释。据我看,OP中的代码应该没有问题。
  • 在我的测试中,这并没有解决问题,因为问题是控制台没有使用固定宽度的字体,所以只是添加空格不会对齐任何东西。
  • @juharr 不知道为什么您的控制台不使用固定宽度的字体 - 我的似乎默认使用该字体?
  • 这是一个不好的建议,因为 OP 代码中显示的格式字符串中的宽度说明符正是这样做的,但不会创建额外的字符串。 OP 显示的代码也完全符合他们声称想要实现的目标,这并没有解释帖子中显示的代码如何最终得到那里显示的输出(到目前为止,没有人能够重现结果)。
  • @NetMage 公平地说,我使用的是 LinqPad,但您可以将控制台使用的字体设置为非固定宽度的字体。最后使用 OPs 代码或此答案中的代码,我得到了完全相同的结果,直到我将它们复制并粘贴到 NotePad++ 中才能对齐
猜你喜欢
  • 2021-05-09
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
  • 1970-01-01
  • 2014-11-02
相关资源
最近更新 更多