У нас есть устаревший класс, который использует индексатор, чтобы позволить людям добавлять произвольные пары ключ-значение:
legacyInstance["myKey"] = value;
К сожалению, мы не можем посмотреть или изменить код для этого класса. Мы можем получить к нему доступ только через его различные свойства.
Что нам нужно сделать, так это разумно клонировать этот объект. Нормальные свойства просто клонировать, конечно:
myClone.blargle = legacyInstance.blargle;
Но как нам обнаружить все ключи, которые кто-то мог добавить к конкретному экземпляру объекта, чтобы правильно их клонировать? В идеале примерно так:
string[] keys = legacyInstance.<#magic!#>;
foreach (string key in keys)
{
myClone[key] = legacyInstance[key];
}
И хотя я подозреваю, что магия может включать в себя какое-то Отражение, получить его трудно, так как я - Tyro Отражения.