无法获取PropertyInfo.SetValue()来设置我的对象上的值

时间:2010-08-09 19:01:20

标签: c# reflection properties foreach

我已将下面的代码简化为一个基本示例,但我仍然无法获取要设置的值。执行propertyInfo.SetValue()时,它将在我的Contact对象的setter上命中一个断点,并在'setter'中正确设置该值。但是,在执行SetValue()之后,projectContact.Contact对象上的字符串属性尚未更改为“a”。知道我在这里做错了吗?

IEnumerable<ProjectContact> contacts = GetContactsByProject(projectId);

        foreach (ProjectContact projectContact in contacts)
        {
            foreach (PropertyInfo propertyInfo in projectContact.Contact.GetType().GetProperties())
            {
                if (propertyInfo.PropertyType == typeof(string))
                {
                    propertyInfo.SetValue(projectContact.Contact, "a", null);
                }
            }
        }

2 个答案:

答案 0 :(得分:7)

我可以想到两种可能性:

  1. 属性设置器在属性上无法正常工作。它可能设置了与属性getter不同的字段,因此当您设置该属性时,您实际上从未“设置”实际值。
  2. 如果“Contact”是结构(值类型),projectCOntact.Contact将返回结构的副本。这将阻止您不断更改“真实”对象。

答案 1 :(得分:4)

我猜你的ProjectContact类型是struct

由于结构是按值传递的,因此您要在结构的副本上设置该值,然后将其丢弃。
这就是为什么可变结构 evil 的原因,应该不惜一切代价避免。

您应该将ProjectContact类型更改为班级。


您的二传手中也可能存在错误。

相关问题