Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c中的自定义属性中添加属性#_C#_.net_Asp.net Mvc_Custom Attributes_Dynamic Attributes - Fatal编程技术网

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(..)
调用,因为您需要使用新创建的类型通过反射创建实例。