Laden...

Codebeispiel modifizieren (Vorschläge?)

Erstellt von reloop vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.694 Views
reloop Themenstarter:in
139 Beiträge seit 2010
vor 13 Jahren
Codebeispiel modifizieren (Vorschläge?)

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

2.298 Beiträge seit 2010
vor 13 Jahren

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 |

U
1.688 Beiträge seit 2007
vor 13 Jahren

Hallo,

benutze HashSet<T>, initialisiert mit allen Tasten, die zu einem Abbruch führen.

reloop Themenstarter:in
139 Beiträge seit 2010
vor 13 Jahren

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

1.044 Beiträge seit 2008
vor 13 Jahren

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

6.911 Beiträge seit 2009
vor 13 Jahren

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!"

B
48 Beiträge seit 2010
vor 13 Jahren

       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 😃

reloop Themenstarter:in
139 Beiträge seit 2010
vor 13 Jahren

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

Gelöschter Account
vor 13 Jahren

@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.

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)