使用枚举作为属性参数

时间:2009-09-15 18:15:51

标签: c# enums attributes

以下是我想要使用的代码:

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此时无效”。我做错了什么,还是不能这样做?

更多信息

我正在尝试传递Enum(Da​​ys),并随机取回其中一个值。

NEVERMIND:我让这部分过于复杂。

4 个答案:

答案 0 :(得分:15)

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

[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(或更具描述性的东西) - 这不会导致错误,但它更具惯用性
  • 我不确定我看到了什么好处......你可以从元数据中找到属性的类型;您认为该属性实际上是在为您买什么?

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

答案 1 :(得分:10)

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

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

答案 2 :(得分:0)

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

[EnumHelper(Days.Sat)]

答案 3 :(得分:0)

只想添加我遇到的方法并修复它。我的财产命名与我的枚举相同。代码将编译并运行,但我在IDE中收到了红线错误消息。将属性的名称更改为唯一的名称会清除该消息。