如何在没有减号的情况下使用string.Format()填充数字?

时间:2014-12-17 09:48:11

标签: c#

我重写了矩阵类的ToString()方法,因此我可以将观察窗口中的内容复制到文本编辑器中以进行进一步分析。

我的想法是ToString()应该返回这样的内容:

[M11:-1.00 M12: 0.00 M13: 0.00 M14: 0.00]
[M21: 0.00 M22: 0.00 M23:-1.00 M24: 0.00]
[M31: 0.00 M32:-1.00 M33: 0.00 M34: 0.00]
[M41: 0.00 M42: 0.00 M43: 0.00 M44: 1.00]

注意正数如何有一个额外的填充空间来补偿减号在负数上消耗的空间。

目前,我这样做:

    public override string ToString()
    {
        return string.Format("[M11:{0:0.00} M12:{1:0.00} M13:{2:0.00} M14:{3:0.00}]\n[M21:{4:0.00} M22:{5:0.00} M23:{6:0.00} M24:{7:0.00}]\n[M31:{8:0.00} M32:{9:0.00} M33:{10:0.00} M34:{11:0.00}]\n[M41:{12:0.00} M42:{13:0.00} M43:{14:0.00} M44:{15:0.00}]",
            M11, M12, M13, M14, M21, M22, M23, M24, M31, M32, M33, M34, M41, M42, M43, M44);
    }

这输出以下内容:

[M11:-1.00 M12:0.00 M13:0.00 M14:0.00]
[M21:0.00 M22:0.00 M23:-1.00 M24:0.00]
[M31:0.00 M32:-1.00 M33:0.00 M34:0.00]
[M41:0.00 M42:0.00 M43:0.00 M44:1.00]

我想在正数中添加填充空格,以便它们排列好,从而使我的调试任务更容易。

不幸的是,there seems to be no placeholder用于登录string.Format()

我想我可以在每个元素上使用.ToString(),使用Pad()然后将它们全部组装,但我仍然认为可能有一种方法可以实现这一点而无需手动汇编数字和创建同时还有很多垃圾。

是否可以在ToString()内执行此操作?或者我是否需要手动填充每个数字,以便周期很好地对齐。

1 个答案:

答案 0 :(得分:3)

您可以使用类似于以下格式:

    [M11:{0: 0.00;-0.00} M12:{0: 0.00;-0.00}...

请查看您链接的MSDN文章中标题为The ";" Section Separator的部分。