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

JSp*_*ang 2 c# reflection foreach properties

我已将下面的代码简化为一个基本示例,但我仍然无法获得设置的值.执行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);
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

Ree*_*sey 7

我可以想到两种可能性:

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