无法获取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); } } }
我可以想到两种可能性:
- 属性setter在该属性上无法正常工作。 它可能是设置与属性getter不同的字段,因此当您设置该属性时,您实际上从未“设置”实际值。
- 如果“Contact”是结构(值类型),则projectCOntact.Contact将返回结构的副本。 这将阻止您不断更改“真实”对象。
我猜你的ProjectContact
类型是一个struct
。
由于结构是按值传递的,因此您要在结构的副本上设置该值,然后将其丢弃。
这就是为什么可变结构是邪恶的 ,应该不惜一切代价避免。
您应该将ProjectContact
类型更改为类。
您的setter中也可能存在错误。