我正在使用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)
,我就不会换行。
答案 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]
]