Я не знаю ни одного существующего проекта, который бы делал то, что вы хотите, но было бы не так сложно реализовать пример, который вы привели, используя лямбды.
Вот еще одна [непроверенная / не скомпилированная / возможно ошибочная] идея с использованием анонимных делегатов:
public override string ToString() {
return this.ToString(x => {
x.Append(t => t.Id);
x.Append(t => t.Name);
});
}
Эта перегрузка ToString()
будет записана как метод расширения, поэтому вы получите ссылку на исходный объект и примете Action<T>
, где [T] - тип исходного объекта. Затем метод ToString () запустит построитель строк или некоторый внутренний объект, выполнит анонимный метод, переданный от вызывающей стороны, и затем обернет результат в любой открывающий / закрывающий текст, который необходим.
Чтобы было ясно, я на самом деле не пытался это. Я просто думаю, что он немного более гибкий, чем лямбда-пример в оригинальном вопросе.