我有自定义属性,它接受对象数组。我试图传递一个对象数组,但收到编译器错误:
属性参数必须是常量表达式,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
数组吗?我尝试了一串字符串,它工作正常。
答案 0 :(得分:5)
这是因为string
的数组是编译时常量,而Person
的数组则不是。这不是一个错误,这是一个限制。我发现,绕过它的最佳方法是使用反射在创建对象时设置属性属性 - 但它并不漂亮。
答案 1 :(得分:1)
我认为当您尝试 将 属性应用于某些代码元素时,会引用错误。如:
[My(new[] { new Person(), })]
你不能使用这样的数组。虽然()
中的表达式是数组创建表达式,但它不是属性参数类型的数组创建表达式,因为根据定义,类Person
不是属性参数类型。