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

时间:2013-09-09 20:03:25

标签: 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;}
}

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

我认为当您尝试 属性应用于某些代码元素时,会引用错误。如:

[My(new[] { new Person(), })]

你不能使用这样的数组。虽然() 中的表达式是数组创建表达式,但它不是属性参数类型的数组创建表达式,因为根据定义,类Person不是属性参数类型。