我正在使用反射来避免在深度复制 OFX 视频插件状态时进行显式转换。
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 参数都有一个包含 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。编译器和智能感知始终将 IEnumerable 显示为 IEnumerable<>。
因此,无论是对象键还是对象 o(枚举数),我如何在反射中分解它们以获取访问权限?我已经尝试调用 Keyframes 对象的 CopyTo 方法(从 Reflection 获得),但它抛出了一个对象而不是实例异常(这被关键帧可枚举的实际显式转换证明是错误的。)一旦我弄清楚如何通过keys 对象或弄清楚如何将 o 对象转换为功能正常的枚举器我相信我可以获得所需的其余属性值。即使引入了新的参数类型,也永远不必更新深拷贝结构。