Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用枚举作为属性参数_C#_Enums_Attributes - Fatal编程技术网

C# 使用枚举作为属性参数

C# 使用枚举作为属性参数,c#,enums,attributes,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 : Attribut

以下是我想使用的代码:

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(天)上得到的错误是“Enum名称此时无效”。我是做错了什么,还是不能这样做

更多信息

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


NEVERMIND:这部分太复杂了。

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

[EnumHelper(Days.Sat)]

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

[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;
    }
}
您试图传递一个类型名,就好像它是一个参数值一样。你不能那样做。但是,您可以执行以下操作:

[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
    (或者更具描述性的名称)——这并不会导致错误,但更为惯用
  • 我不确定我是否看到了好处。。。您可以从元数据中找到属性的类型;你认为这个属性到底给你买了什么

如果你能让我们知道你想要完成什么,我们可能会对你更有用。

只是想补充一下我是如何遇到这个问题并修复它的。我将属性命名为与枚举相同的名称。代码将编译并运行,但我在IDE中收到一条红线错误消息。将属性名称更改为唯一的名称将清除消息。

这将不起作用,因为装箱转换从
Days.Sat
Enum
。不会吗?我一直认为将常量值作为值类型传递可以处理属性。