Один ко многим Enum в C # - PullRequest
1 голос
/ 05 мая 2011

У меня есть 2 перечисления, которые мне нужны, чтобы связать 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 ]

1 голос
/ 05 мая 2011

Я бы использовал FlagsAttribute.Таким образом, вы можете использовать двоичное сравнение.

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

[FlagsAttribute]
public enum PendingStatus
{
    PendingA = 256,
    PendingX = 512,
    PendingY = 1024,
}
1 голос
/ 05 мая 2011

Вы можете использовать значения перечисления в качестве битового флага, как объяснено здесь .

Таким образом, вы можете смешивать 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) ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...