문제

I have custom attribute that takes array of objects. I am trying to pass an array of objects to it, but receive compiler error:

An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type.

Here is the code:

[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;}
}

I saw some articles online, but haven't seen any closer to mine. Am I doing something wrong or it is bug? If it is not bug can someone explain why I can't pass array of Person? I tried array of string and it works fine.

도움이 되었습니까?

해결책

It's because an array of string is a compile-time constant whereas an array of Person is not. This isn't a bug, it's a limitation. The best way around it, that I've found, is by using reflection to set the attributes properties on creation of the object - but it's not pretty.

다른 팁

I think the error quoted comes when you try to apply your attribute to some code element. As in:

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

You cannot use an array like that. While the expression in () is an array creation expression, it is not an array creation expression of an attribute parameter type since, by definition, the class Person is not an attribute parameter type.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top