4

我能够添加Attribute并通过valuesconstructor。但是当没有适当的参数来传递values时如何传递。例如如何添加这个?AttributeconstructorDisplayAttribute using Reflection.Emit

[Display(Order = 28, ResourceType = typeof(CommonResources), Name = "DisplayComment")]

希望足够清楚我要完成的工作。如果没有请询问。

4

1 回答 1

10

你用CustomAttributeBuilder. 例如:

var cab = new CustomAttributeBuilder(
    ctor, ctorArgs,
    props, propValues,
    fields, fieldValues
);
prop.SetCustomAttribute(cab);

(或相关的重载之一)

在您的情况下,这看起来(这纯粹是猜测)类似于:

var attribType = typeof(DisplayAttribute);
var cab = new CustomAttributeBuilder(
    attribType.GetConstructor(Type.EmptyTypes), // constructor selection
    new object[0], // constructor arguments - none
    new[] { // properties to assign to
        attribType.GetProperty("Order"),
        attribType.GetProperty("ResourceType"),
        attribType.GetProperty("Name"),
    },
    new object[] { // values for property assignment
        28,
        typeof(CommonResources),
        "DisplayComment"
    });
prop.SetCustomAttribute(cab);

注意我假设Order,ResourceTypeName属性。如果它们是fields,则存在不同的重载。

于 2013-07-15T09:05:11.287 回答