2011-05-05 104 views
1

我有这个2枚举,我需要涉及PendingStatus到的TransactionStatus一对多枚举在C#

讲解,对每个事务有我使用的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, 
} 

我该如何解决这个问题?

回答

1

您可以使用枚举值作为位标记,如解释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) ... 
+0

您可能想要演示如何。 – jgauffin 2011-05-05 19:15:44

+0

设置标志枚举使用十六进制fwiw更加清晰 – 2011-05-05 19:22:43

1

我会使用FlagsAttribute。所以你可以使用二进制比较。

[FlagsAttribute] 
public enum TransactionStatus 
{ 
    New = 0, 
    Submitted = 1, 
    PendingStatus = 2, 
    Accepted = 4, 
    // (...) 
} 

[FlagsAttribute] 
public enum PendingStatus 
{ 
    PendingA = 256, 
    PendingX = 512, 
    PendingY = 1024, 
}