可以在某些C#.Net类属性上设置的基于枚举的自定义属性。可能吗?

可以在某些C#.Net类属性上设置的基于枚举的自定义属性。可能吗?,c#,enums,custom-attributes,C#,Enums,Custom Attributes,是否可以在C#.Net中的某些类属性上设置基于枚举的自定义属性 示例:我正在尝试执行以下操作: [AutoUpdateEnumParam(new AutoUpdateParamOption[] { new AutoUpdateParamOption("Offline", 0), new AutoUpdateParamOption("Online", 1), new AutoUpdateParamOption("Deacti

是否可以在C#.Net中的某些类属性上设置基于枚举的自定义属性

示例:我正在尝试执行以下操作:

[AutoUpdateEnumParam(new AutoUpdateParamOption[] 
          { new AutoUpdateParamOption("Offline", 0), 
            new AutoUpdateParamOption("Online", 1), 
            new AutoUpdateParamOption("Deactivated", 2), 
            new AutoUpdateParamOption("Reset", 3), 
            new AutoUpdateParamOption("Removed", 4) })]
public int Status
{
   get;
   set;
}
当我编译项目时,它会给我以下错误:

An attribute argument must be a constant expression, typeof expression
or array creation expression of an attribute parameter type
[更新] 有人问我,我是如何定义AutoUpdateNumparam类的。这是:

    [AttributeUsage(AttributeTargets.Property)]
    public class AutoUpdateEnumParam : Attribute
    {
        AutoUpdateParamOption[] _paramEnum;

        public AutoUpdateParamOption[] Options
        {
            get
            {
                return _paramEnum;
            }
        }

        public AutoUpdateEnumParam(AutoUpdateParamOption[] paramEnum)
        {
            this._paramEnum = paramEnum;
        }
    }

    public class AutoUpdateParamOption
    {
        private string _text = string.Empty;
        private object _value = null;
        private string _type = "string";

        public string Text
        {
            get
            {
                return _text;
            }
        }

        public object Value
        {
            get
            {
                return _value;
            }
        }

        public string ValueType
        {
            get
            {
                return _type;
            }
        }

        public AutoUpdateParamOption(string text, int value)
        {
            this._text = text;
            this._value = value;
            this._type = "int";
        }

        public AutoUpdateParamOption(string text, double value)
        {
            this._text = text;
            this._value = value;
            this._type = "double";
        }

        public AutoUpdateParamOption(string text, string value)
        {
            this._text = text;
            this._value = value;
            this._type = "string";
        }

        public AutoUpdateParamOption(string text, bool value)
        {
            this._text = text;
            this._value = value;
            this._type = "boolean";
        }
    }

属性必须派生自
System.attribute
-class,因此枚举不起作用。无论如何,您的
AutoUpdateNumparam
是如何定义的?如果我正确理解了这个问题,您可以将值表示为字符串(例如使用类似json的语法):
[MyAttribute(“脱机:0,联机:1,”)]
,您可以在属性构造函数中解析它以生成(反序列化?)所需的值。这不是很有用。也许字符串数组可以工作(如果不行,那么构造函数重载不同数量的
string
参数就可以了),然后您可以定义常量与属性一起使用(将具有intellisense支持),类似于
[MyAttribute(脱机、联机等)]
@Sinatr我已经求助于此:)但我的问题仍然存在,我的问题中提到的事情,可以做到吗?属性参数受到严格限制,编译器需要能够在编译时对其求值,以便将值嵌入元数据中。所以,任何像新语句这样的东西都不是不可能的,这就是代码。