C# einfacherer Weg bei Eingabe Programm beenden?

4 Antworten

Es gibt auf jeden Fall einfachere Möglichkeiten.

Es gibt die Möglichkeit von ToLower():

if(choice.ToLower() == "ja") {}

Oder ToUpper():

if(choice.ToUpper() == "JA") {}

Oder auch über Equals():

if(choice.Equals("ja", StringComparison.OrdinalIgnoreCase)){}

Alles drei erspart dir Schreibarbeit.

Woher ich das weiß:Studium / Ausbildung

Erzesel  11.05.2020, 18:37

Braucht man alles nicht mit RegEx

0
RainySky  13.05.2020, 18:39
@Erzesel

Regex sind für so einen so einfachen Vergleich einfach übertrieben. Das macht man halt einfach nicht. Eine simple Stringmanipulation reicht vollkommen.

0

Dein e Variablenbenennung "choice"

...hat mich inspiriert den Choice-Befehl von Batch nachzubilden....

Warum sollte irgendwer einen Buchstaben und Enter eingeben, wenn es genügt dem Nutzer die gültigen Eine-Taste-Optionen anzubieten und ansonsten zu tun als hätte der Nutze nichts getan... bei falscher Eingabe wird einfach mit einem Backspace Leerzeichen Backspace der falsche Buchstabe überschrieben und auf den nächsten gewartet

// Simuliere  Batch choice
using System;
using System.Text.RegularExpressions;


namespace IncludeHelp
{
    class Test
    {
        // Main Method 
        static void Main(string[] args)
        {
            string rightLetters = "AJX"; //Hier gültige Buchstaben zum verlassen des Inputloops festlegen
            string pattern = String.Format("[{0}]",rightLetters) ; 
            char ch;
            Match m;
            Console.WriteLine("Weiter mit den Buchstaben: {0}", string.Join(",", rightLetters.ToCharArray ()));
            do
            {
                Console.Write("\b \b"); //Verberge falsche Eingaben. Backspace Leerzeichen Backspace
                ch = Console.ReadKey().KeyChar; //nur  ein Zeichen lesen
                m = Regex.Match(ch.ToString(), pattern, RegexOptions.IgnoreCase); //simmt einr der Buchstaben?
            } while (!m.Success); //drehe  solange  falsche Buchstaben
            Console.WriteLine();
            Console.WriteLine("Du hast die SwitchOption :{0}  gewählt", ch);
            // Console  offen halten
            Console.Read();
        }
    }
}

if (choice.ToLower() == „ja“)

Ist was du suchst.

Woher ich das weiß:Berufserfahrung – Softwareentwicklerin

ohwehohach  11.05.2020, 17:25

Das behandelt aber nicht den Fall, dass nur "j" eingegeben wird.

1
Erzesel  11.05.2020, 18:33

Der Ansatz ist schon mal ok, für solche Sachen gibts match und RegularExpressions...

Im einfachste Fall wäre das [Jj]*[Aa] , J oder j und einmal oder beliebig oft A oder a... (da ist auch ein jauchzendes JAaaaa... erlaubt😅

0
Lamanini  11.05.2020, 22:23
@Erzesel

Für einen einfachen Test, ob da j oder ja steht, braucht man kein Regex. Vor allen Dingen nicht wenn derjenige der es lernen soll, nicht die ToLower-Methode kennt.

Sicher, man kann es machen. Aber ich denke das verwirrt mehr als es hilft, und schießt über das benötigte hinaus.

0
Erzesel  12.05.2020, 07:06
@Lamanini

Das scheint das generelle Problem von Leuten , mit einem Erfahrungpotential von vielen Jahrzehnten zu sein.

Neben den Kenntnissen in Sachen Programmierung, kennt man auch das Verhalten von Nutzern, welche zum Teil sehr eigenwillig auf Aufforderungen durch ein Programm reagieren. 

Das scheint der Fragesteller ebenfalls entdeckt zu haben und versucht jede verrückte Eventualität abzudecken. Natürlich gibt es bei ja/j nur 4 Variationen, welche man mit .ToLower() auf 2 reduziert. Hockt da ein Brite vorm Rechner kommt auch noch yes/y hinzu... (ein Affentanz den ich vor kurzem selbst erleben durfte)

Das war nicht nur das rüberreichen des Salzstreuers (den habt Ihr ihm bereits gegebenen), sonder ein Anstoß um auch in der Zukunft auf wachsende Anforderungen flexibel zu reagieren. 

In dieser Hinsicht scheine ich auf der gleichen Schine zu fahren wie die Entwickler von RegEx oder Choice... 

Zwei Herangehensweisen , die eine (RegEx) reagiert flexibel auf verschiedene Möglichkeiten einer Antwort. Die andere lässt nur vorgegebene Antworten zu. 

Jede popelige Messagebox bietet heute nur ein Wahl zwischen vorgegeben Antwortmöglichkeiten. 

1
Erzesel  11.05.2020, 18:41
und einmal oder beliebig oft A oder a...

Da hat die Autokorrektur vom Handy zugeschlagen...:

Regex *[char] steht natürlich für keinmal oder beliebig ...

0
ohwehohach  11.05.2020, 19:03
@Erzesel

Du meinst also die RegEx

^[Jj]{1}[Aa]*$

oder

^j{1}a*$

mit der Option, die Groß- und Kleinschreibung zu ignorieren, denn der Text muss mit genau einem "j" beginnen und mit keinem oder beliebig vielen "a"s enden, darf aber nicht "jaguar" sein.

1
if (choice.ToLowerInvariant().StartsWith("j"))

wäre eine Möglichkeit.