Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Codebeispiel modifizieren (Vorschläge?)
reloop
myCSharp.de - Member

Avatar #avatar-3256.jpg


Dabei seit:
Beiträge: 139

Themenstarter:

Codebeispiel modifizieren (Vorschläge?)

beantworten | zitieren | melden

Hallo Community!

Ich habe in einem KeyUp Event einen Codeabschnitt, der auf mich den Eindruck macht, als ob man ihn eleganter gestalten könnte.

Habt ihr vielleicht eine Idee wie?

            
if (e.Key == Key.LeftCtrl) return;
if (e.Key == Key.A && e.KeyboardDevice.Modifiers == ModifierKeys.Control) return;
if (e.Key == Key.Down) return;
if (e.Key == Key.Up) return;
if (e.Key == Key.Left) return;
if (e.Key == Key.Right) return;
if (e.Key == Key.Enter) return;
if (e.Key == Key.LeftShift) return;
if (e.Key == Key.Tab) return;

Sinn der Sache ist das Filtern gewisser Tasten, bei denen nichts passieren soll

Gruss,
reloop
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2.296

beantworten | zitieren | melden

Da du sowieso returnst würd ich das in ein Statement zusammen fassen.

Bin mir nur noch nicht sicher wie genau, denn optisch würde es keinen Unterschied machen und sogar noch komplizierter aussehen.
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
ujr
myCSharp.de - Experte



Dabei seit:
Beiträge: 1.688

beantworten | zitieren | melden

Hallo,

benutze HashSet<T>, initialisiert mit allen Tasten, die zu einem Abbruch führen.
private Nachricht | Beiträge des Benutzers
reloop
myCSharp.de - Member

Avatar #avatar-3256.jpg


Dabei seit:
Beiträge: 139

Themenstarter:

beantworten | zitieren | melden

Hey ujr,

danke für den Hinweis.

Habe es jetzt so gelöst:

            var hsKeys = new HashSet<Key>
                             {
                                 Key.LeftCtrl,
                                 Key.Down,
                                 Key.Up,
                                 Key.Left,
                                 Key.Right,
                                 Key.Enter,
                                 Key.LeftShift,
                                 Key.Tab
                             };
            if (hsKeys.Any(hsKey => hsKey == e.Key))
            {
                return;
            }

Gibt es einen grundlegenden Unterschied wieso du zum HashSet und nicht zur List tendiert hast?

Gruss,
reloop
private Nachricht | Beiträge des Benutzers
zero_x
myCSharp.de - Member

Avatar #avatar-2567.gif


Dabei seit:
Beiträge: 1.044
Herkunft: Koblenz

beantworten | zitieren | melden

Hallo reloop,

du musst ja spezifizieren, dass bei bestimmten Eingeben nichts passieren soll. Weil du das Verhlaten haben möchtest, musst du es ja irgendwie angeben. Dir bleibt wohl nichts anderes übrig. Was du noch machen könntest, wäre, dass du alle Eingeben außer XY behandelst. Bei dem "außer" führst du dann ein return; aus.

zero_x
zero_x | myCSharp.de - gemeinsam mehr erreichen

Für längere Zeit inaktiv.
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.865
Herkunft: Waidring

beantworten | zitieren | melden

Hallo,

vewende nicht die Any-Erweiterungsmethode - im worst case ein O(n) - sondern die Contains-Methode des HashSet - ist ein O(1)-Vorgang und somit effizienter. Darum auch keine List<T>.


mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
bSharp
myCSharp.de - Member



Dabei seit:
Beiträge: 48

beantworten | zitieren | melden


       private bool IsOneOf(Keys myKeyCode, params Keys[] mylist)
       {
           return mylist.Contains(myKeyCode);
       }

       private void ListDiagnosis_KeyUp(object sender, KeyEventArgs e)
       {
           if(IsOneOf(e.KeyCode, Keys.A, Keys.L, Keys.I, Keys.E, Keys.N))
             return;
       }


Ok, war zu langsam :)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von bSharp am .
private Nachricht | Beiträge des Benutzers
reloop
myCSharp.de - Member

Avatar #avatar-3256.jpg


Dabei seit:
Beiträge: 139

Themenstarter:

beantworten | zitieren | melden

Erledigt!

Eine Frage noch, zum persönlichen Verständnis:

List<T1> besitzt doch auch eine Methode Namens "contains". Der Unterschied zwischen den Beiden war für mich bisher noch nicht ersichtlich.

Danke für eure Hilfe,
reloop
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

@bSharp:

deine Version ist noch schlimmer als die Version mit der list<T>.

Hier ist die einzig korrekte Lösung mit HashSet oder Dictionary zu suchen, da diese Überprüfung normalerweise häufig durchgeführt wird.
Zitat
List<T1> besitzt doch auch eine Methode Namens "contains". Der Unterschied zwischen den Beiden war für mich bisher noch nicht ersichtlich.

siehe: [Übersicht] .NET Framework 2.X Auflistungen (Collections)