Я использую Reflection, чтобы избежать явного кастинга при глубоком копировании состояния плагина OFX.Каким образом объект (как в var объекта типа) должен быть отличен с помощью Reflection? (OFX specific)
object pvalue = parameter.GetType().GetProperty("Value").GetValue(parameter, null);
потом ....
OFXParameter newparameter = parameter on new plugin;
PropertyInfo pi = newparameter.GetType().GetProperty("Value");
pi.SetValue(newparameter, pvalue, null);
Я успешно избегал литья параметр (из которых может быть эволюционирующий пул типов). Теперь проблема. Каждый параметр OFX имеет свойство keyframes, содержащее OFXKeyframes TValue, TKey. Я не могу найти способ доступа к списку ключевых кадров без явного литья.
object keys = parameter.GetType().GetProperty("Keyframes").GetValue(parameter,null);
MethodInfo enumofkeys = keys.GetType().GetMethod("GetEnumerator");
object o = enumofkeys.Invoke(keys,null);
Каждый ответ, который я прочитал, объясняет родовое кастинг с помощью IEnumerable, но я должен что-то пропускать. Я ограничен Net 3.5 и с ограничением на 2,0 предпочтительнее. Я не имею доступа к IEnumerable без явного приведения. Компилятор и intellisense всегда показывают IEnumerable как IEnumerable <>.
Как с объектными ключами, так и с объектом o (перечислитель), как я могу разбить их в Reflection, чтобы получить доступ? Я попытался вызвать метод CopyTo (полученный из Reflection) объекта Keyframes, но он выбрасывает объект, а не исключение экземпляра (что доказано неправильно с помощью фактического явного набора ключевых кадров, перечислимых.) Как только я выясню, как перечислить через key object или выяснить, как включить объект o в функционирующий перечислитель. Я уверен, что могу получить остальные значения свойств, которые мне нужны. Глубокая структура копии никогда не будет обновляться, даже если будут введены новые типы параметров.
Каким образом используется очиститель для отражения, чем использование явного литья? –
Без явного приведения в действие, если параметры OFX обновляются (это написано для расширения Sony Vegas), глубокая копия не волнует. Если мне нужно явно указать типы параметров в следующей версии OFX или пересмотре Sony Vegas, мне придется обновить расширение. При отражении, не заботящемся о типах значений, любой тип параметра можно копировать без литья. – Blacksting