我有这个2 enum我需要将PendingStatus与TransactionStatus
联系起来要解释一下,对于每个事务,我使用的是TransactionStatus枚举的单一状态,那么对于每个TransactionStatus,我使用PendingStatus枚举有许多未决原因吗?
/// <summary>
/// Represent all available status for Transaction
/// </summary>
public enum TransactionStatus
{
New =0,
Submitted =1,
PendingStatus = 2,
Accepted = 3,
Rejected =4,
InProgress =5,
Completed=6,
Failed=7,
Canceled=8
}
/// <summary>
/// Represent all available pending status for Transaction
/// </summary>
public enum PendingStatus
{
PendingA =0,
PendingX =1,
PendingY = 2,
}
我该如何处理?
答案 0 :(得分:1)
您可以将枚举值用作bitflag,如here所述。
这样您可以将PendingStatus和TransactionStatus混合在一起。
/// <summary>
/// Represent all available status for Transaction
/// </summary>
[Flags]
public enum TransactionStatus
{
New = 0,
Submitted = 1,
PendingStatus = 2,
Accepted = 4,
Rejected = 8,
InProgress = 16,
Completed = 32,
Failed = 64,
Canceled = 128
}
/// <summary>
/// Represent all available pending status for Transaction
/// </summary>
[Flags]
public enum PendingStatus
{
PendingA = 256,
PendingX = 512,
PendingY = 1024
}
// Example to set transaction as accepted and pending
var MyTransactionStatus = Accepted & PendingA;
// How to check transaction is pendingA regardless of its status ?
if (MyTransactionStatus & PendingA == PendingA) ...
答案 1 :(得分:1)
我会使用FlagsAttribute。所以你可以使用二进制比较。
[FlagsAttribute]
public enum TransactionStatus
{
New = 0,
Submitted = 1,
PendingStatus = 2,
Accepted = 4,
// (...)
}
[FlagsAttribute]
public enum PendingStatus
{
PendingA = 256,
PendingX = 512,
PendingY = 1024,
}