[英]Custom Attribute - getting “not a valid named attribute argument” for an enum
[英]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.