我已将下面的代码简化为一个基本示例,但我仍然无法获取要设置的值。执行 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);
}
}
}
最佳答案
我可以想到两种可能性:
- 属性 setter 无法在属性上正常工作。它可能会设置与属性 getter 不同的字段,因此当您设置属性时,您永远不会真正“设置”实际值。
- 如果“Contact”是一个结构(值类型),projectCOntact.Contact 将返回该结构的副本。这将阻止您更改“真实”对象。
关于c# - 无法获取 PropertyInfo.SetValue() 来设置我的对象的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3443274/