Se ho uno enum
contrassegnato con [Flags]
, esiste un modo in .NET per testare un valore di questo tipo per vedere se contiene solo un singolo valore? Posso ottenere il risultato che voglio usando il conteggio dei bit, ma preferirei utilizzare le funzioni integrate, se possibile.Test di un valore enum [Flag] per un singolo valore
Durante il looping dei valori enum
dinamicamente, Enum.GetValues()
restituisce anche i flag di combinazione. La chiamata a tale funzione nel numero enum
nell'esempio seguente restituisce 4 valori. Tuttavia, non desidero il valore combinazioni incluse nell'algoritmo interno. Il test dei singoli valori enum
per l'uguaglianza non è disponibile, poiché enum
potrebbe potenzialmente contenere molti valori e richiede inoltre una manutenzione aggiuntiva quando i valori nella modifica enum
cambiano.
[Flags]
enum MyEnum
{
One = 1,
Two = 2,
Four = 4,
Seven = One | Two | Four,
}
void MyFunction()
{
foreach (MyEnum enumValue in Enum.GetValues(typeof(MyEnum)))
{
if (!_HasSingleValue(enumValue)) continue;
// Guaranteed that enumValue is either One, Two, or Four
}
}
private bool _HasSingleValue(MyEnum value)
{
// ???
}
correlati: StackOverflow: Enum.IsDefined on combined flags
+1. Mentre sicuramente non è la tecnica più trasparente, è senza dubbio la più semplice. –