C#中的一对多枚号

时间:2011-05-05 19:06:38

标签: c# enums

我有这个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,
}   

我该如何处理?

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,
}