gpt4 book ai didi

c# - 如何在没有属性构造函数(Reflection.Emit)的情况下将值添加到动态添加到属性的属性

转载 作者:太空狗 更新时间:2023-10-30 00:25:20 26 4
gpt4 key购买 nike

我能够添加 Attribute 并通过 constructor 向其传递 values。但是当 Attribute 没有带有要传递的适当参数的 constructor 时,如何传递 values。例如如何添加此 DisplayAttribute using Reflection.Emit

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

希望它足够清楚我正在努力完成的事情。如果不是请询问。

最佳答案

您使用 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);

请注意,我假设 OrderResourceTypeName属性。如果它们是字段,则存在不同的重载。

关于c# - 如何在没有属性构造函数(Reflection.Emit)的情况下将值添加到动态添加到属性的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17650302/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com