2013-08-19 22 views
2

我正在使用Minimod.PrettyPrint。对于多维列表和数组,如果元素超过特定长度,PrettyPrint()函数将自动在元素之间插入换行符。Minimod漂亮打印 - 如何自定义换行符?

我的问题是 - 如何控制数组元素之间发生换行的时间?特别是,我想所有的数组元素之间有一个换行符。例如,我想功能

// 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),我不会换行。

回答

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] 
]