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

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

IEnumerable 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); } } } 

我可以想到两种可能性:

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

我猜你的ProjectContact类型是一个struct

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

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


您的setter中也可能存在错误。