c# - silverlight -enumを使用したカスタムアトリブ
-
03-10-2019 - |
質問
私は次のクラスを持っています:
[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
解決
列挙をオブジェクトにボックスして、そのように渡してから、ボックスを解除できるようです。しかし、それを解釈してから列挙されていない場合、例外をスローすることによってのみこれを実施することができます
[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;
}
}
所属していません StackOverflow