Как я могу обнаружить ключи, используемые в индексаторе C #? - PullRequest
0 голосов
/ 20 сентября 2011

У нас есть устаревший класс, который использует индексатор, чтобы позволить людям добавлять произвольные пары ключ-значение:

legacyInstance["myKey"] = value;

К сожалению, мы не можем посмотреть или изменить код для этого класса. Мы можем получить к нему доступ только через его различные свойства.

Что нам нужно сделать, так это разумно клонировать этот объект. Нормальные свойства просто клонировать, конечно:

myClone.blargle = legacyInstance.blargle;

Но как нам обнаружить все ключи, которые кто-то мог добавить к конкретному экземпляру объекта, чтобы правильно их клонировать? В идеале примерно так:

string[] keys = legacyInstance.<#magic!#>;
foreach (string key in keys)
{
    myClone[key] = legacyInstance[key];
}

И хотя я подозреваю, что магия может включать в себя какое-то Отражение, получить его трудно, так как я - Tyro Отражения.

1 Ответ

3 голосов
/ 20 сентября 2011

Возьмите ILSpy и войдите в источники.Если ваша коллекция не предоставляет членам возможность перебирать ключи (например, Dictionary выставляет Keys), тогда это ваш единственный вариант.Кстати, может быть, ваша коллекция составляет IEnumerable?На самом деле для коллекции странно не предоставлять каких-либо средств итерации.Разве это не называется YouCanOnlyUseIndexCollection?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...