繁体   English   中英

使用枚举作为属性参数

[英]Using an Enum as an Attribute Argument

这是我要使用的代码:

public enum Days { Sat = 1, Sun, Mon, Tue, Wed, Thu, Fri };

[EnumHelper(typeof(Days))]
public Days DayOfWeek { get; set; }

EnumHelper看起来像:

[AttributeUsage(AttributeTargets.Property,AllowMultiple=true)]
public class EnumHelper : Attribute
{
    public Type MyEnum { get; set; }
    public EnumHelper(Type enum)
    {
        MyEnum = enum;
    }
}

我在EnumHelper(Days)上遇到的错误是“ Enum Name此时无效”。 我是在做错什么,还是做不到?

更多信息

我试图传递枚举(天),并随机取回其中一个值。

没关系:我把这部分复杂化了。

您正在尝试传递类型名称 ,就像它是参数值一样 你不能那样做。 但是,您可以执行以下操作:

[AttributeUsage(AttributeTargets.Property,AllowMultiple=true)]
public class EnumHelper : Attribute
{
    public Type EnumType;
    public EnumHelper(Type enumType)
    {
        EnumType = enumType;
    }
}

...

[EnumHelper(typeof(Days))]
public Days DayOfWeek { get; set; }

然而:

  • 我个人不会将EnumType为公共字段; 使其成为财产。
  • 当前没有验证EnumType 实际上是一个枚举。 您不能在编译时执行此操作,但是可以在执行时执行。
  • 为了方便起见,应将其称为EnumHelperAttribute (或更EnumHelperAttribute ,是更具描述性的)-这不会引起错误,但更常见
  • 我不确定我是否会从中受益,您已经可以从元数据中找到属性的类型了。 您认为该属性实际上在购买您什么?

如果您可以让我们知道您要完成的工作,我们可能会对您有所帮助。

属性中的参数只能是常量。 如果要传递枚举类型,则必须仅传递类型:

[EnumHelper(typeof(Days))]
public Days DayOfWeek { get; set; }


[AttributeUsage(AttributeTargets.Property,AllowMultiple=true)]
public class EnumHelper : Attribute
{
    public Type MyEnum;
    public EnumHelper(Type enum)
    {
        MyEnum = enum;
    }
}

参数应该是枚举值,而不是枚举类型,例如:

[EnumHelper(Days.Sat)]

只是想补充一下我遇到的问题并加以解决。 我的财产与枚举相同。 该代码将编译并运行,但是我在IDE中收到一条红线错误消息。 将属性名称更改为唯一的名称将清除该消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM