在C#中动态地将值分配给子类

时间:2013-04-04 15:54:46

标签: c# .net linq inheritance polymorphism

如何基于来自其继承类的值在C#中动态加载子类?

我有一个继承实体的类,因为我不能将父类转换为其子类型,所以我想动态加载实体数据而不显式定义每个属性。

我尝试使用foreach循环进行循环,但正如您所知,您无法为foreach变量赋值。

我的失败尝试:

public class ABroker : DP_ePAFBroker
{
    public ABroker() : base()
    {
    }
    public ABroker(DP_ePAFBroker data)
    {
        var props = typeof(DP_ePAFBroker).GetProperties();
        foreach(object obj in this)
        {
            foreach (var prop in props)
            {
                obj = prop.GetValue(obj, null);
            }
        }

    }
    public IEnumerator GetEnumerator()//List of Objects
    {
        var props = typeof(DP_ePAFBroker).GetProperties().Select(p).ToList<Object>();
        return props.GetEnumerator();
    }
}

1 个答案:

答案 0 :(得分:1)

您似乎正在尝试将基类实例中的所有值复制到您的继承者身上。

你可以这样做:

public ABroker(DP_ePAFBroker data)
{
    foreach(var property in typeof(DP_ePAFBroker).GetProperties())
    {
        // get the value
        var value = property.GetValue(data, null);
        // set it on this instance
        property.SetValue(this, value, null);
    }
}

但是要小心这样复制引用类型。你最终可能会做一些丑陋的事情并为自己制造一些非常烦人的错误。