Зачем беспокоиться о строителе?
У вас есть (неприятная) изменчивая структура, но если она вам нужна, используйте ее напрямую, а не создавайте громоздкий и ненужный Строитель.
Меня несколько беспокоит, что у вас есть достаточное количество этих структур, чтобы вы чувствовали, что вам нужно автоматически создавать обертки такого типа. Моя внутренняя реакция такова, что вы делаете это неправильно ...
Если цель неизменяемой оболочки - просто сохранить снимок, просто используйте что-то вроде этого:
public struct Snapshot<T> where t : struct
{
private readonly T data;
public Snapshot(T value) { this.data = value; }
public T Data { get { return data; } }
}
Переданная структура гарантированно никогда больше не изменится, но вы можете получить прямой доступ ко всем ее значениям (и изменения этих результатов происходят в копии, созданной при вызове базовой функции get_Data)