Minimod Pretty Print - 如何自定义换行符?

时间:2013-08-19 04:01:36

标签: c# pretty-print

我正在使用Minimod.PrettyPrint。对于多维列表和数组,如果元素超过一定长度,PrettyPrint()函数会自动在元素之间插入换行符。

我的问题是 - 如何控制数组元素之间何时发生换行?具体来说,我希望所有数组元素之间都有换行符。例如,我想要函数

// myArray is of type int[][] 
myArray.PrettyPrint(/*insert customization here to make the line break*/);

输出

[
  [<elements of myArray[0]>],
  [<elements of myArray[1]>],
  [<elements of myArray[2]>]
]

默认情况下,PrettyPrint()会将其打印为

 [[<elements of myArray[0]>],[<elements of myArray[1]>],[<elements of myArray[2]>]]

如果PrettyPrint()写的字符串的长度低于某个长度。

有一个PrettyPrint()的重载需要一个对象来自定义输出,但我找不到如何使用它的示例。

编辑:我试过

PrettyPrintMinimod.Settings settings = new PrettyPrintMinimod.Settings();
settings.PreferMultiline(true);
myArray.PrettyPrint(settings);

它似乎没有做任何事情。如果我将settings.PreferMultiline(false)传递给包含许多元素的数组,我仍会得到换行符,如果我传递settings.PreferMultiline(true),我就不会换行。

1 个答案:

答案 0 :(得分:2)

对我来说没关系:

var test = new int[][] { new int[] {1,2,3}, new int[] {4,5,6} };

var settings = new PrettyPrintMinimod.Settings();
settings.PreferMultiline(true);
Debug.WriteLine(test.PrettyPrint(settings));

它产生如下输出:

[
  [
    1,
    2,
    3
  ],
  [
    4,
    5,
    6
  ]
]

如果那不是你真正想要的,那就是核选项 - 编写你自己的格式化程序:

settings.RegisterFormatterFor(typeof(int[][]), o => {
    var array2d = (int[][])o;
    return "[\r\n" + string.Join(",\r\n", 
        array2d.Select(array1d => "\t[" + string.Join(", ", 
            array1d.Select(s => s.ToString())) + "]")) + "\r\n]";
});

Debug.WriteLine(test.PrettyPrint(settings));

产生如下输出:

[
    [1, 2, 3],
    [4, 5, 6]
]