可以在某些C#.Net类属性上设置的基于枚举的自定义属性。可能吗?
是否可以在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
[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我已经求助于此:)但我的问题仍然存在,我的问题中提到的事情,可以做到吗?属性参数受到严格限制,编译器需要能够在编译时对其求值,以便将值嵌入元数据中。所以,任何像新语句这样的东西都不是不可能的,这就是代码。