Один прием для получения поведения, подобного этому (без отражения), должен принять params SomeObject[][]
и также определить неявный оператор от SomeObject
до SomeObject[]
. Теперь можно передать смесь массивов SomeObject
и элементы индивидуума SomeObject
.
public class Item
{
public string Text { get; }
public Item (string text)
{
this.Text = text;
}
public static implicit operator Item[] (Item one) => new[] { one };
}
public class Print
{
// Accept a params of arrays of items (but also single items because of implicit cast)
public static void WriteLine(params Item[][] items)
{
Console.WriteLine(string.Join(", ", items.SelectMany(x => x)));
}
}
public class Test
{
public void Main()
{
var array = new[] { new Item("a1"), new Item("a2"), new Item("a3") };
Print.WriteLine(new Item("one"), /* ... */ array, new Item("two"));
}
}
Вам необходимо включить «INDENT» и установить величину отступа для преобразователя:
t.setOutputProperty(OutputKeys.INDENT, "yes");
t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
Обновление:
Ссылка: Как удалить текстовые узлы, содержащие только пробелы, из DOM перед сериализацией?
(Большое спасибо всем участникам, особенно @ marc-novakowski, @ james-murty и @saad) :
Если вам нужен отступ, вы должны указать его в TransformerFactory
.
TransformerFactory tf = TransformerFactory.newInstance();
tf.setAttribute("indent-number", new Integer(2));
Transformer t = tf.newTransformer();