2

我有接受对象数组的自定义属性。我正在尝试将一组对象传递给它,但收到编译器错误:

属性参数必须是属性参数类型的常量表达式、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;}
}

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

4

2 回答 2

5

这是因为数组 ofstring是编译时常量,而数组 ofPerson不是。这不是错误,而是限制。我发现最好的解决方法是在创建对象时使用反射来设置属性属性——但这并不漂亮。

于 2013-09-09T20:05:17.240 回答
1

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

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

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

于 2013-09-09T20:09:29.947 回答