在 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)]