Laden...

Anzahl gesetzter Flags ermitteln?

Erstellt von citizen.ron vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.050 Views
citizen.ron Themenstarter:in
432 Beiträge seit 2005
vor 16 Jahren
Anzahl gesetzter Flags ermitteln?

ä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

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo citizen.ron,

per Schleife über Enum.GetValues (vorausgesetzt, es sind in dem Enum keine Kombinationen von Flags definiert).

herbivore

citizen.ron Themenstarter:in
432 Beiträge seit 2005
vor 16 Jahren

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.

49.485 Beiträge seit 2005
vor 16 Jahren

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

citizen.ron Themenstarter:in
432 Beiträge seit 2005
vor 16 Jahren

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.

O
778 Beiträge seit 2007
vor 16 Jahren

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.

175 Beiträge seit 2006
vor 16 Jahren

oder einfach:


int num = myEnumValue.ToString().Split(',').Length;

Nicht so schön, aber effektiv 🙂

49.485 Beiträge seit 2005
vor 16 Jahren

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