C # - Silverlight - CustomAttribute с Enum - PullRequest
1 голос
/ 20 мая 2010

У меня есть следующий класс:

[MetadataAttribute]
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class ModuleActivationButtonAttribute : ExportAttribute
{
    public Enum TargetRegion { get; set; }

    public ModuleActivationButtonAttribute(Enum targetRegion) : base(typeof(IModuleActivationButton))
    {
        TargetRegion = targetRegion;
    }
}

Класс компилируется нормально, но когда я украшаю им свою собственность:

[ModuleActivationButton(Regions.Tabs)]
public IModuleActivationButton ModuleActivationButton
{
    get { return new ModuleActivationButton() as IModuleActivationButton; }
    set { ModuleActivationButton = value; }
}

public enum Regions
{
    Content,
    Tabs
}

Компилятор выплевывает:

Error 1 An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type C:\...\CompanyX.Modules.Home\HomeModule.cs 28 33 CompanyX.Modules.Home

1 Ответ

1 голос
/ 21 мая 2010

Кажется, что я могу поместить enum в объект и передать его как таковой, а затем распаковать. Но тогда я могу применить это только путем генерирования исключения, если при интерпретации оно не распаковывается в Enum

[MetadataAttribute]
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class ModuleActivationButtonAttribute : ExportAttribute
{
    public Enum TargetRegion { get; set; }

    public ModuleActivationButtonAttribute(object targetRegion) : base(typeof(IModuleActivationButton))
    {
        TargetRegion = targetRegion as Enum;
    }
}
...