Если у вас есть доступ к коду, то вы можете добавить метод в MyBigObject
, который принимает TextWriter
и записывает каждое свойство. Например:
public class MyBigObject
{
public void Write(TextWriter writer)
{
writer.Write(bigStringField1);
writer.Write(bigStringField2);
// etc.
}
}
Если подклассы MyBigObject
должны написать свое собственное представление, а затем сделать виртуальный метод, а подклассы вызывают реализацию базового класса.
Если вы не являетесь владельцем кода, и поля открываются через свойства, вы можете создать класс адаптера, который принимает MyBigObject и выписывает каждое свойство. Вы также можете создать некоторые методы расширения, которые делают то же самое.
Если вы не можете получить доступ к исходному коду, вы можете использовать отражение, чтобы исследовать поля на объекте, захватить значение каждого поля и Write()
из представления ToString()
каждого значения. Тем не менее, отражение происходит медленнее, чем прямой доступ к полям, и он включает в себя гораздо более промежуточные объекты. Я не знаю, будет ли использование рефлексии стоить этого в вашем случае.
Вы пытаетесь записать строку или двоичное представление объекта? Потому что у вас не может быть строки без создания пространства для нее в памяти, если вы не делаете что-то фантастическое. – Codeman
'ToString' полностью инкапсулирует свой способ создания строки, и нет метода' object', который передает строковое представление. Без более подробной информации это «нет». – zneak
«нет дополнительных классов или объектов», а «myBigObject' имеет 50 строковых полей», противоречат друг другу. Что он? –