使用枚举作为属性参数

Mar*_*tin 7 c# enums attributes

这是我想要使用的代码:

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

[EnumHelper(typeof(Days))]
public Days DayOfWeek { get; set; }
Run Code Online (Sandbox Code Playgroud)

EnumHelper看起来像:

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

我在EnumHelper(Days)上遇到的错误是"Enum Name此时无效".我做错了什么,还是不能做到这一点?

更多信息

我试图通过枚举(天),并随机取回其中一个值.

NEVERMIND:我这部分过于复杂.

Jon*_*eet 16

您正在尝试传递类型名称,就好像它是一个参数值.你不能这样做.但是,你可以这样做:

[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; }
Run Code Online (Sandbox Code Playgroud)

然而:

  • 我个人不会EnumType公开场; 把它变成一个财产.
  • 目前还没有任何证明,确认EnumType真正的枚举.你不能在编译时这样做,但你可以在执行时完成它.
  • 为了惯例,它应该被称为EnumHelperAttribute(或者更具描述性的东西) - 这不会导致错误,但它更具惯用性
  • 我不确定我看到了什么好处......你可以从元数据中找到属性的类型; 您认为该属性实际上是在为您买什么?

如果您能告诉我们您想要完成的任务,我们可能会对您更有用.


TcK*_*cKs 11

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

[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;
    }
}
Run Code Online (Sandbox Code Playgroud)