C#使用反射复制基类属性

标签 c# reflection copy

我想使用反射将所有属性从 MyObject 更新到另一个。我遇到的问题是特定对象是从基类继承的,并且这些基类属性值未更新。

以下代码复制顶级属性值。

public void Update(MyObject o)
{
    MyObject copyObject = ...

    FieldInfo[] myObjectFields = o.GetType().GetFields(
    BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);

    foreach (FieldInfo fi in myObjectFields)
    {
        fi.SetValue(copyObject, fi.GetValue(o));
    }
}

我想看看是否有更多的 BindingFlags 属性可以用来提供帮助,但无济于事。

最佳答案

试试这个:

public void Update(MyObject o)
{
    MyObject copyObject = ...
    Type type = o.GetType();
    while (type != null)
    {
        UpdateForType(type, o, copyObject);
        type = type.BaseType;
    }
}

private static void UpdateForType(Type type, MyObject source, MyObject destination)
{
    FieldInfo[] myObjectFields = type.GetFields(
        BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);

    foreach (FieldInfo fi in myObjectFields)
    {
        fi.SetValue(destination, fi.GetValue(source));
    }
}

关于C#使用反射复制基类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1198886/

相关文章:

jquery - jquery 对话框中的 ZeroClipboard 复制文本不起作用

c# - 是否可以将面板的内容复制到另一个面板

c# - 如何确保我可以替换目录中的文件?

c# - 如何使用打印对话框

c# - 从抽象类调用GetMethod获取子类的方法?

c# - 如何遍历对象的成员变量?

c++ - 复制构造函数问题

c# - 如何在 C#.NET 的循环中创建不确定的后台线程

c# - 从 C# 中的字符串末尾删除回车符和换行符

java - 使用 Java 类反射的泛型 "quasi toString()"