C# 无法获取PropertyInfo.SetValue()来设置对象上的值
我已经将下面的代码简化为一个基本示例,但仍然无法获得要设置的值。执行propertyInfo.SetValue()时,它将在我的联系人对象的setter上遇到断点,并且该值在“setter”中设置正确。但是,在执行SetValue()后,我的projectContact.Contact对象上的字符串属性未更改为“a”。你知道我会做错什么吗C# 无法获取PropertyInfo.SetValue()来设置对象上的值,c#,reflection,properties,foreach,C#,Reflection,Properties,Foreach,我已经将下面的代码简化为一个基本示例,但仍然无法获得要设置的值。执行propertyInfo.SetValue()时,它将在我的联系人对象的setter上遇到断点,并且该值在“setter”中设置正确。但是,在执行SetValue()后,我的projectContact.Contact对象上的字符串属性未更改为“a”。你知道我会做错什么吗 IEnumerable<ProjectContact> contacts = GetContactsByProject(projectId);
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);
}
}
}
IEnumerable contacts=GetContactsByProject(projectId);
foreach(联系人中的项目联系人ProjectContact)
{
foreach(projectContact.Contact.GetType().GetProperties()中的PropertyInfo PropertyInfo)
{
if(propertyInfo.PropertyType==typeof(字符串))
{
propertyInfo.SetValue(projectContact.Contact,“a”,null);
}
}
}
我可以想到两种可能性:
我猜您的
ProjectContact
类型是struct
由于结构是按值传递的,因此您在结构的副本上设置值,然后将其丢弃。这就是为什么可变结构是邪恶的,应该不惜一切代价避免 您应该将
ProjectContact
类型更改为类
也有可能您的setter中有一个bug。是的,您搞定了!这是一个结构,不是我的选择:)今天学到了一些新东西!