我有一個如下所示的自定義屬性,
[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
{
}
uj5u.com熱心網友回復:
您可以使用 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
{
}
uj5u.com熱心網友回復:
如果你真的想要你的屬性中的一個字串,你可以使用字串插值。
[SetValForAll($"{nameof(LimitEnum.Initiated)},{nameof(LimitEnum.InProcess)}")]
但是,如果接收端無論如何都要將這些作為列舉值讀取,那么最好使用Flags列舉并將 OR 運算的值傳遞給屬性,就像 David Browne 的回答一樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/369363.html
上一篇:在打字稿中過濾物件和回傳鍵
