Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [C#] Enum flag mit Case abfragen (https://www.delphipraxis.net/119926-%5Bc-%5D-enum-flag-mit-case-abfragen.html)

Yheeky 3. Sep 2008 10:45


[C#] Enum flag mit Case abfragen
 
Hi,

habe heute mal eine Frage bezüglich C#.
Ich habe folgende Enumeration:

Code:
   [Flags]
   public enum BorderPositions
   {
      None = 0x00,
      Top = 0x01,
      Bottom = 0x02,
      Left = 0x04,
      Right = 0x08,
   }
Wie kann ich mit Switch...Case abfragen, ob mehrere Flags gesetzt sind?

Code:
switch (BorderPosition)
{
   case BorderPositions.Bottom:
   break;
}
Dies wird z.B. nur ausgeführt, wenn die BorderPosition NUR Bottom hat, aber nicht, wenn BorderPosition Top UND Bottom hat.
Kann mir da jemand helfen?

DeddyH 3. Sep 2008 10:46

Re: [C#] Enum flag mit Case abfragen
 
Wieso willst Du das mit Switch machen?

Yheeky 3. Sep 2008 11:18

Re: [C#] Enum flag mit Case abfragen
 
Ich mache es so wie im Posting dargestellt. Kennst du eine andere Variante?

DeddyH 3. Sep 2008 11:22

Re: [C#] Enum flag mit Case abfragen
 
Da bietet sich doch eine binäre Auswertung an (ich hoffe, die Syntax stimmt so in etwa):
Code:
if (BorderPosition & BorderPositions.Bottom)//Bottom-Flag ist gesetzt

Yheeky 3. Sep 2008 11:33

Re: [C#] Enum flag mit Case abfragen
 
Das funktioniert leider nicht, da BorderPosition vom Typ BorderPositions? ist.

DeddyH 3. Sep 2008 12:07

Re: [C#] Enum flag mit Case abfragen
 
Und wie kann es dann 2 Werte annehmen?

Khabarakh 3. Sep 2008 12:57

Re: [C#] Enum flag mit Case abfragen
 
Zitat:

Zitat von Yheeky
Das funktioniert leider nicht, da BorderPosition vom Typ BorderPositions? ist.

Dann eben ein großes if mit .HasValue drumherum und darin mit .Value arbeiten?

Edith:
Zitat:

Zitat von DeddyH
Da bietet sich doch eine binäre Auswertung an (ich hoffe, die Syntax stimmt so in etwa):
Code:
if (BorderPosition & BorderPositions.Bottom)//Bottom-Flag ist gesetzt

C# besitzt keinen impliziten Cast von int/... nach bool, also
Code:
if ((BorderPosition.Value & BorderPositions.Bottom) == BorderPositions.Bottom)

Yheeky 3. Sep 2008 16:22

Re: [C#] Enum flag mit Case abfragen
 
Zitat:

Zitat von Khabarakh
C# besitzt keinen impliziten Cast von int/... nach bool, also
Code:
if ((BorderPosition.Value & BorderPositions.Bottom) == BorderPositions.Bottom)

Das funktioniert! :-) Danke!

Dax 3. Sep 2008 16:53

Re: [C#] Enum flag mit Case abfragen
 
Wenn du C#3 benutzt, kannst du auch folgendes machen:
Code:
static class EnumExtender
{
  public static bool Has<T>(this T? enum, T flag) where T: enum
  {
    return enum != null && (enum & flag) == flag;
  }
}

if (BorderPosition.Has(BorderPositions.Bottom))


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz