ähem,
auch auf die Gefahr hin mich hier als nixnutz zu outen... 😁
wenn ich ein klassenattribut habe, das als flagspeicher dient:
[Flags]
public enum eViewType
{
Unknown = 0,
DataGrid = 1,
InfoCards = 2,
List = 4
}
public class View
{
private eViewType viewType;
...
}
kann ich ja mit folgendem Konstrukt ermitteln, ob das Flag x gesetzt ist:
if ((viewType & eViewType.List) == eViewType.List)
...
gibt es auch eine syntaktische möglichkeit herauszubekommen, wie hoch die anzahl der insgesamt gesetzten flags ist?
danke
gruß, ron
Hallo citizen.ron,
per Schleife über Enum.GetValues (vorausgesetzt, es sind in dem Enum keine Kombinationen von Flags definiert).
herbivore
hi herbivore,
schleifen wollte ich ja eigentlich nicht - ich dacht, es gäbe etwas vorgefertigtes á la Enum.GetDefinedCount(...)
na gut, dann muss es halt so gehen.
Hallo citizen.ron,
Enum.GetDefinedCount
Es gibt im Framework viel, aber nicht alles, zumal ich mir eigentlich nicht vorstellen kann, wozu man die Anzahl verwenden könnte.
schleifen wollte ich ja eigentlich nicht
Und was ist schlimmes an eine Schleife? Du kannst sie ja in eine eigene Methode packen.
ist eigentlich Enum.IsDefined der Weg der Wahl statt der von mir im ersten Post genannten Variante, um gesetzte Flags zu ermitteln?
Nein, das ist was komplett anderes.
herbivore
zumal ich mir eigentlich nicht vorstellen kann, wozu man die Anzahl verwenden könnte.
wenn nur eines der genannten flags gesetzt ist, wird das auswahlmenü gesperrt, da es ja keine andere zulässige ansicht gibt, die der benutzer jetzt aufrufen könnte.
Wenn du es über eine Schleife machst würd ich aber nie über Enum.GetNames gehen, sondern den Enumerationswert erst auf Integer casten und dann die 64 Fälle durchprobieren, damit hast du das Problem mit den Flagkombinationen nicht.
oder einfach:
int num = myEnumValue.ToString().Split(',').Length;
Nicht so schön, aber effektiv 🙂
Hallo dani.net,
Funktioniert zum einen nur, wenn der Enum mit [Flags] gekennzeichnet ist (was er aber sein sollte) und hat zum anderen die gleiche Schwäche, wie mein Vorschlag oben. Wenn Kombinationen von Flags definiert sind, ist das Ergebnis zu niedrig.
herbivore