我想使用反射将所有属性从 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/