You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# 如何从Enum枚举取值传入自定义Attribute的属性参数?

你遇到的报错是因为C#特性的入参要求必须是编译时常量,LimitEnum.max.ToString()是运行时执行的方法,不属于编译时常量,因此无法通过编译。

以下是两种可实现需求的解决方案:


方案1:修改特性构造函数参数类型为枚举(最推荐)

直接把特性的入参类型从string改为你定义的LimitEnum,从根源上避免字符串传参,实现强类型校验:

[AttributeUsage(AttributeTargets.All, Inherited = true, AllowMultiple = false)]
public class SetValForAll : Attribute
{
    public LimitEnum Limit { get; set; }

    public SetValForAll(LimitEnum limit)
    {
        Limit = limit;
        // 如果业务需要字符串值,后续使用时调用Limit.ToString()即可
    }
}

使用方式:

[SetValForAll(LimitEnum.max)]
public class UsingTheAttributeHere
{
}

方案2:不修改原有特性定义,使用nameof操作符

如果你不能修改原有SetValForAll特性的定义,可以用C#的nameof关键字,它会在编译期把枚举成员转换成对应的常量字符串,符合特性参数要求:

[SetValForAll(nameof(LimitEnum.max))]
public class UsingTheAttributeHere
{
}

nameof(LimitEnum.max)会在编译时直接替换为常量字符串"max",不需要运行时计算,也不需要硬编码写死字符串。


内容的提问来源于stack exchange,提问作者Abhishek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:36:03