如何使用c#动态创建现有类的新属性

时间:2017-11-22 05:00:34

标签: c#

我们如何动态地向已经具有某些属性的现有类添加属性。

假设我有返回类型IList

的方法

Employee类有3个属性,但在某些情况下,通过方法返回Employee类中不存在的额外属性,并且每次调用时此动态属性都可能会更改。

因此,基于结果,我们必须使用C#

动态地添加属性以区别于现有属性

2 个答案:

答案 0 :(得分:1)

我使用以下命令在ExpandoObject中创建对象的浅表副本,以便我可以分配额外的属性。这可能适合你。

private dynamic ConvertToExpandoObject<T>(T value)
{
    var result = new ExpandoObject();
    var valueType = typeof(T);
    foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(valueType))
    {
        result[property.Name] = property.GetValue(value);
    }
    return result as ExpandoObject;
}

示例:

Employee e = db.GetEmployee(1);
dynamic expandableEmployee = ConvertToExpandoObject(e);
expandableEmployee.ExpectedYearsOfService = 10*1000;

请注意,此字段不会添加到原始对象中。

答案 1 :(得分:-3)

使用dynamic

dynamic d = yourExistingObject;
d.newProperty = "string for example";