有没有办法在运行时获取构造函数参数的值

时间:2013-07-11 09:33:26

标签: c# reflection attributes reflection.emit

我要做的是将现有的attributes从一个property复制到另一个foreach (var prop in typeof(Example).GetProperties()) { FieldBuilder field = typeBuilder.DefineField("_" + prop.Name, prop.PropertyType, FieldAttributes.Private); PropertyBuilder propertyBuilder = typeBuilder.DefineProperty(prop.Name, PropertyAttributes.HasDefault, prop.PropertyType, null); object[] attributes = prop.GetCustomAttributes(true); foreach (var attr in attributes) { //Here I need to get value of constructor parameter passed in declaration of Example class ConstructorInfo attributeConstructorInfo = attr.GetType().GetConstructor(new Type[]{}); CustomAttributeBuilder customAttributeBuilder = new CustomAttributeBuilder(attributeConstructorInfo,new Type[]{}); propertyBuilder.SetCustomAttribute(customAttributeBuilder); } } 。 这是我现在的代码:

attributes

它正常工作但仅适用于具有无参数constructor的{​​{1}}。 对于例如“DataTypeAttribute”只有constructors parameter

现在我想知道是否有办法获得attribute constructor

的当前值

假设我有这个模型:

public class Example
{
    public virtual int Id { get; set; }
    [Required]
    [MaxLength(50)]
    [DataType(DataType.Text)]
    public virtual string Name { get; set; }
    [MaxLength(500)]
    public virtual string Desc { get; set; }
    public virtual string StartDt { get; set; }

    public Example()
    {

    }
}

现在我只能copy RequiredAttribute,因为它有无参数constructor。我无法copy DataTypeAttribute。所以我想从我的示例模型中获取value DataType.Text

任何人都有一些想法如何让它发挥作用?

1 个答案:

答案 0 :(得分:4)

使用GetCustomAttributesData()而不是返回构造属性的GetCustomAttributes()。它返回CustomAttributeData的集合,其中包含您需要的内容:用于创建属性的构造函数,其参数以及有关属性的命名参数的信息。