2

我正在使用 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)我不会得到换行符。

4

1 回答 1

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]
]
于 2014-06-03T03:53:25.583 回答