将一组对象传递给Attribute构造函数

Dil*_*hod 2 c# attributes custom-attributes

我有自定义属性,采取对象数组.我试图传递一个对象数组,但收到编译器错误:

属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式.

这是代码:

[AttributeUsage(AttributeTargets.Class)]
public class MyAttribute : Attribute
{
    public MyAttribute(Person[] people)
    {
         People = people;
    }

    public Person[] People{get; private set;}
}

public class Person
{
    public string Name{get;set;}
    public string LastName{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我在网上看到了一些文章,但没有看到更接近我的文章.我做错了什么或者是错误?如果不是bug可以解释为什么我不能传递数组Person?我尝试了一串字符串,它工作正常.

Mik*_*oud 5

这是因为数组string是编译时常量而数组Person不是.这不是一个错误,这是一个限制.我发现,绕过它的最佳方法是使用反射在创建对象时设置属性属性 - 但它并不漂亮.

  • @Dilshod,属性应用于`Type`,而不是对象.这意味着CLR没有真正的方法将它们应用于单个对象. (2认同)