一个对象(如var的类型对象)如何使用反射?(OFX具体)

本文关键字:反射 具体 何使用 OFX 对象 var 类型 一个对象 | 更新日期: 2023-09-27 18:17:52

我使用反射来避免在深度复制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<>。

因此,无论是对象键还是对象0(枚举器),我如何在反射中分解它们以获得访问权限?我已经尝试调用CopyTo方法(从反射获得)的关键帧对象,但它抛出一个对象,而不是一个实例异常(这被证明是错误的关键帧枚举的实际显式转换)。一旦我弄清楚如何枚举keys对象,或者弄清楚如何将0对象转换为一个有效的枚举器,我就有信心可以获得所需的其余属性值。即使引入了新的参数类型,也不需要更新深层复制结构。

一个对象(如var的类型对象)如何使用反射?(OFX具体)

如果使用相关的接口,会简单得多。在这种情况下,可以使用IEnumerable接口。

IEnumerable keys = parameter.GetType().GetProperty("Keyframes")
    .GetValue(parameter, null) as IEnumerable;

必须处理枚举对象的类型,但可枚举对象本身更容易处理。

IEnumerable属于System.Collections,不属于System.Collections.Generic