![]() |
[C#] Enum flag mit Case abfragen
Hi,
habe heute mal eine Frage bezüglich C#. Ich habe folgende Enumeration:
Code:
Wie kann ich mit Switch...Case abfragen, ob mehrere Flags gesetzt sind?
[Flags]
public enum BorderPositions { None = 0x00, Top = 0x01, Bottom = 0x02, Left = 0x04, Right = 0x08, }
Code:
Dies wird z.B. nur ausgeführt, wenn die BorderPosition NUR Bottom hat, aber nicht, wenn BorderPosition Top UND Bottom hat.
switch (BorderPosition)
{ case BorderPositions.Bottom: break; } Kann mir da jemand helfen? |
Re: [C#] Enum flag mit Case abfragen
Wieso willst Du das mit Switch machen?
|
Re: [C#] Enum flag mit Case abfragen
Ich mache es so wie im Posting dargestellt. Kennst du eine andere Variante?
|
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
|
Re: [C#] Enum flag mit Case abfragen
Das funktioniert leider nicht, da BorderPosition vom Typ BorderPositions? ist.
|
Re: [C#] Enum flag mit Case abfragen
Und wie kann es dann 2 Werte annehmen?
|
Re: [C#] Enum flag mit Case abfragen
Zitat:
Edith: Zitat:
Code:
if ((BorderPosition.Value & BorderPositions.Bottom) == BorderPositions.Bottom)
|
Re: [C#] Enum flag mit Case abfragen
Zitat:
|
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 02:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz