【发布时间】:2015-01-21 06:36:43
【问题描述】:
我正在使用 .Net 2013、Windows7。我能够使用反射设置和获取单个值。当我尝试使用反射在数组中设置值时,我无法这样做。使用反射,我可以获取数组中的值。
我发现在数组中设置值似乎是一种解决方法,但我不明白为什么 SetValue 函数不起作用。下面是我的代码。
property = type.GetProperty("propDeviceMessageMask", BindingFlags.Public | BindingFlags.Instance);
if (property != null)
{
DEVICE_MESSAGE_MASK_Types[] value = (DEVICE_MESSAGE_MASK_Types[])property.GetValue(device, null);
value[0] = DEVICE_MESSAGE_MASK_Types.Disabled;
value[1] = DEVICE_MESSAGE_MASK_Types.Disabled;
value[2] = DEVICE_MESSAGE_MASK_Types.Disabled;
value[3] = DEVICE_MESSAGE_MASK_Types.Disabled;
property.SetValue(device, DEVICE_MESSAGE_MASK_Types.Disabled, new object[] { (int)4 });
}
propDeviceMessageMask 是一个包含 8 个 DEVICE_MESSAGE_MASK_Type 的数组。我可以使用 GetValue 函数获取整个数组。我可以使用索引 0-3 编辑值。当我尝试使用 SetValue 函数更新索引 4 时,我在 TargetParameterCountException 中得到参数计数不匹配。
【问题讨论】:
-
顺便说一句,没有.Net 2013之类的东西。有一个Visual Studio 2013版,但这无助于我们回答您的问题,因为那是一个没有直接关系的编辑器与最终产品。您的目标是哪个版本的 .Net 将是包含在 C# 中的更好标签。
标签: c# reflection