我已将下面的代码简化为一个基本示例,但我仍然无法获取要设置的值。执行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);
}
}
}
答案 0 :(得分:7)
我可以想到两种可能性:
答案 1 :(得分:4)
我猜你的ProjectContact
类型是struct
。
由于结构是按值传递的,因此您要在结构的副本上设置该值,然后将其丢弃。
这就是为什么可变结构 evil 的原因,应该不惜一切代价避免。
您应该将ProjectContact
类型更改为班级。
您的二传手中也可能存在错误。