Sto cercando di implementare un'interfaccia web per un database utente. Gli ospiti possono creare ospiti per i loro corsi, gli ospiti possono essere cancellati dopo che il corso è terminato, ma devono rimanere nel database per un dato periodo di tempo. Se un host tenta di creare un guest già esistente nel database, possono verificarsi le seguenti cose:
- Il guest è già attivo ed è stato creato dallo stesso host,
- Il guest è già attivo ed è stato creato da un host diverso,
- Il guest è nello stato eliminato ed è stato creato dallo stesso host,
- Il guest è nello stato eliminato ed è stato creato da un host diverso.
Attualmente sto cercando di rappresentare lo stato dell'utente in questo enumer:
public enum GuestUserStatus
{
    Unknown = 0,
    NewGuest = 1,
    ActiveSameHost = 10,
    ActiveDifferentHost = 11,
    DeletedSameHost = 20,
    DeletedDifferentHost = 21
}
 Questo mi permette di   switch()    sullo stato utente impostato. 
Tuttavia, per impostare lo stato dell'utente, attualmente sto usando repetetive se clausole come queste:
if (queriedUser.GuestDetails.Creator == creator)
{
    if (queriedUser.GuestDetails.State == GuestState.Deleted)
    {
        currentStatus = GuestUserStatus.DeletedSameHost;
    }
    else
    {
        currentStatus = GuestUserStatus.ActiveSameHost;
    }
}
else
{
    if (queriedUser.GuestDetails.State == GuestState.Deleted)
    {
        currentStatus = GuestUserStatus.DeletedDifferentHost;
    }
    else
    {
        currentStatus = GuestUserStatus.ActiveDifferentHost;
    }
}
Le clausole if annidate agiscono sulla stessa condizione ma con un risultato diverso.
 C'è un modo per evitarlo? Ho esaminato l'enumerazione con   [Flags]    e utilizzando le potenze di 2 come valori sottostanti, ma successivamente non ho più potuto utilizzare   switch()   . 
AGGIORNAMENTO: Si noti che ho le stesse condizioni due volte e risultati diversi per loro.
UPDATE2: provare ad indirizzare la domanda collegata Come per affrontare un anti-pattern a freccia "ramificato"? : Diciamo che implemento la risposta accettata di quella domanda. Questo mi darebbe qualcosa del genere:
 bool activeSameHost = (queriedUser.Guest.Creator == creator && queriedUser.GuestDetails.State != GuestState.Deleted);
 bool activeDifferentHost = (queriedUser.Guest.Creator == creator && queriedUser.GuestDetails.State == GuestState.Deleted);
 bool inactiveSameHost = (queriedUser.Guest.Creator != creator && queriedUser.GuestDetails.State == GuestState.Deleted);
 bool inativeDifferentHost = (queriedUser.Guest.Creator != creator && queriedUser.GuestDetails.State == GuestState.Deleted);
if(activeSameHost) currentStatus = GuestUserStatus.ActiveSameHost;
if(inactiveSameHost) currentStatus = GuestUserStatus.InactiveSameHost;
if(activeDifferentHost) currentStatus = GuestUserStatus.ActiveDifferentHost;
if(inactiveDifferentHost) currentStatus = GuestUserStatus.InactiveDifferentHost;
 Non riesco a vedere il miglioramento. Certo,   if    s non è più nidificato, ma l'unica cosa che è cambiata è la complessità che si sposta dalla% nidificata co_de nidificata all'assegnazione di variabili intermedie.