C# 在c中的自定义属性中添加属性#
我想动态地将属性添加到给定类的属性中,因为项目将变得更大,并且过程完全是重复的,类似这样:C# 在c中的自定义属性中添加属性#,c#,.net,asp.net-mvc,custom-attributes,dynamic-attributes,C#,.net,Asp.net Mvc,Custom Attributes,Dynamic Attributes,我想动态地将属性添加到给定类的属性中,因为项目将变得更大,并且过程完全是重复的,类似这样: public class MyAttr : Attribute { public MyAttr () { foreach(var prop in properties) { prop.Attributes.Add([Display(Name = nameof(prop.Name), ResourceType = typeof(Labels))]);
public class MyAttr : Attribute {
public MyAttr () {
foreach(var prop in properties) {
prop.Attributes.Add([Display(Name = nameof(prop.Name), ResourceType = typeof(Labels))]);
}
}
}
并在课堂上使用它:
[MyAttr]
public class SomeClass {
public string Name {get; set;}
public string Description {get; set;}
}
当然,上面的代码不是一个真正的程序,但我试图使它简单
有可能这样做吗?如果没有,是否有解决办法
更新:我知道有一个名为
CallerMemberName
的属性可以检索给定属性的名称,但是如何获取属性本身并向其添加更多属性?我认为您可以将其他帖子的以下答案结合起来,使某些内容起作用
从属性访问对象属性:
在运行时添加属性:通过在运行时创建新类型
除非你打算对所有属性进行定期更改,否则最好先处理重复性工作。这样做的时候,不可避免地会有风险/问题。也许定义一个包含泛型属性和所需自定义属性的类会更容易@Matt#也许您提到的链接是答案的一部分,但另一部分是如何向属性添加更多属性?您只需向自定义泛型属性支持的类添加其他实例属性。我检查了C#6到8的新增内容,但找不到任何新内容。(还有6.0-7.3版本的链接)。因此,我认为使用自定义类型描述符可以痛苦地实现这一点:前两句话很有希望:ICustomTypeDescriptor接口允许对象提供关于自身的类型信息。通常,当对象需要动态类型信息时使用此接口。注意,建议的方法可以防止
newsomeclass(..)
调用,因为您需要使用新创建的类型通过反射创建实例。