当输入参数在 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 的回答中那样。
我有一个自定义属性,如下所示,
[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 的回答中那样。