在 C# 中从 Enum 设置自定义属性值
Set custom attribute value from Enum in C#
我有一个自定义属性,如下所示,
[AttributeUsage(AttributeTargets.All, Inherited = true, AllowMultiple = false)]
public class SetValForAll : Attribute
{
public string Limit { get; set; }
public SetValForAll(string limit)
{
Limit = limit;
}
}
在使用此属性 (SetValForAll) 时,我想使用一个枚举传递 Limit 的值,但它显示错误 'An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type'
我的枚举如下,
public enum LimitEnum
{
max,
min
}
下面的一段代码在属性行中抛出错误。
[SetValForAll(LimitEnum.max.ToString())]
public class UsingTheAttributeHere
{
}
如何在使用 SetValForAll 属性时从 LimitEnum 获取值,而不是传递硬编码字符串?
您可以使用 nameof
表达式将 enum
作为字符串常量:
[SetValForAll(nameof(LimitEnum.max))]
(Reference.)
嗯,您不能在属性值中传递非常量字符串。为什么不使用 enum
类型而不是 string
作为 属性?可以使用LimitEnum
传入构造函数。
[AttributeUsage(AttributeTargets.All, Inherited = true, AllowMultiple = false)]
public class SetValForAll : Attribute
{
public LimitEnum Limit { get; set; }
public SetValForAll(LimitEnum limit)
{
Limit = limit;
}
}
并像这样使用它:
[SetValForAll(LimitEnum.max)]
我有一个自定义属性,如下所示,
[AttributeUsage(AttributeTargets.All, Inherited = true, AllowMultiple = false)]
public class SetValForAll : Attribute
{
public string Limit { get; set; }
public SetValForAll(string limit)
{
Limit = limit;
}
}
在使用此属性 (SetValForAll) 时,我想使用一个枚举传递 Limit 的值,但它显示错误 'An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type'
我的枚举如下,
public enum LimitEnum
{
max,
min
}
下面的一段代码在属性行中抛出错误。
[SetValForAll(LimitEnum.max.ToString())]
public class UsingTheAttributeHere
{
}
如何在使用 SetValForAll 属性时从 LimitEnum 获取值,而不是传递硬编码字符串?
您可以使用 nameof
表达式将 enum
作为字符串常量:
[SetValForAll(nameof(LimitEnum.max))]
(Reference.)
嗯,您不能在属性值中传递非常量字符串。为什么不使用 enum
类型而不是 string
作为 属性?可以使用LimitEnum
传入构造函数。
[AttributeUsage(AttributeTargets.All, Inherited = true, AllowMultiple = false)]
public class SetValForAll : Attribute
{
public LimitEnum Limit { get; set; }
public SetValForAll(LimitEnum limit)
{
Limit = limit;
}
}
并像这样使用它:
[SetValForAll(LimitEnum.max)]