当输入参数在 C# 中为枚举时,如何在属性中传递逗号分隔值

How to pass comma separated value in attribute when input parameter is 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 的值,不是一个单一值,而是枚举的逗号分隔值。

我的枚举如下,

public enum LimitEnum
{
    Initiated,
    InProcess,
    Done
}

如果我在任何类型中应用该属性,我希望在属性中接收逗号分隔的枚举值,例如“Initiated,InProcess”

我尝试了下面的一段代码,但它显示错误。我如何使用属性级别的枚举来传递逗号分隔值?

[SetValForAll(nameof(LimitEnum.Initiated, LimitEnum.InProcess))]
public class UsingTheAttributeHere
{
}

您可以使用 Flags 枚举来做到这一点。例如

[Flags]
public enum LimitEnum
{
    Initiated = 1,
    InProcess = 2,
    Done = 4
}

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

    public SetValForAll(LimitEnum limit)
    {
        Limit = limit;
    }
}

[SetValForAll(LimitEnum.Initiated | LimitEnum.InProcess)]
public class UsingTheAttributeHere
{
}

如果你真的想要在你的属性中使用字符串,你可以使用字符串插值。

[SetValForAll($"{nameof(LimitEnum.Initiated)},{nameof(LimitEnum.InProcess)}")]

但是如果接收端无论如何都要将这些作为枚举值读取,那么您最好使用 Flags 枚举并将 OR'ed 值传递给属性,就像 David Browne 的回答中那样。