Wenn ich eine enum
habe, die mit [Flags]
markiert ist, gibt es eine Möglichkeit in .NET, einen Wert dieses Typs zu testen, um zu sehen, ob es nur einen einzelnen Wert enthält? Ich kann das Ergebnis erhalten, das ich Bit-Zählung verwenden möchte, aber ich würde lieber integrierte Funktionen verwenden, wenn möglich.Einen [Flags] Enum-Wert für einen einzelnen Wert testen
Wenn die Werte enum
dynamisch durchlaufen werden, gibt Enum.GetValues()
auch die Kombinationsflags zurück. Der Aufruf dieser Funktion auf dem enum
im folgenden Beispiel gibt 4 Werte zurück. Ich möchte jedoch nicht den Wert Kombinationen im inneren Algorithmus enthalten. Das Testen der einzelnen enum
Werte für die Gleichheit ist out, da die enum
möglicherweise viele Werte enthalten kann, und es erfordert auch zusätzliche Wartung, wenn die Werte in der enum
ändern.
[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)
{
// ???
}
Verwandte: StackOverflow: Enum.IsDefined on combined flags
+1. Obwohl es definitiv nicht die transparenteste Technik ist, ist es zweifellos die einfachste. –