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

标签 c# reflection properties foreach

我已将下面的代码简化为一个基本示例,但我仍然无法获取要设置的值。执行 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);
                }
            }
        }

最佳答案

我可以想到两种可能性:

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

关于c# - 无法获取 PropertyInfo.SetValue() 来设置我的对象的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3443274/

相关文章:

java - 使用反射来调用以 WebSphere 数据库连接作为参数的方法

java - 使用spring读取属性表单文件

c# - C#接口(interface)和继承的问题

c# - Web API - 上传到 Azure 存储时获取进度

c# - 在 ASP.NET 4.5 中将 LINQ 与 MySql 结合使用

c# - Linq-to-SQL 可以根据需要进行插入或更新吗?

c# - 有没有办法向自动属性添加函数调用?

c# - 如何修复此 ArrayIndex 错误?

c# - 使用反射创建一个在构建期间未知的接口(interface)的 Mock

c# - 如何在运行时创建可变维度数组?