Laden...

Eingabe String sofort verwenden

Erstellt von sooks82 vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.051 Views
Thema geschlossen
S
sooks82 Themenstarter:in
16 Beiträge seit 2011
vor 12 Jahren
Eingabe String sofort verwenden

Hey,
habe eine relativ allgemeine Frage: Wie nutze ich einen eingegebenen String (hier zufällig in einer Konsolenanwendung) sofort, also ohne schreiben zu müssen:


If (eingabe = a) {
    a = 0;
}

Momentan habe ich eine Eingabe für "start" in die a, b oder c kommt und eine Eingabe für "target", in die auch nur a, b oder c kommt. Habe also 9 Möglichkeiten, was dann (vorallem weil ich innerhalb der ifs weitere ifs einbauen muss) extrem lang und unübersichtlich ist. Wie löst man das normalerweise in C#?
Danke.

G
538 Beiträge seit 2008
vor 12 Jahren

Also 1. kannst du switch benutzen das machts nicht viel besser, aber irgendwie netter zu lesen und 2. kannst du nachdem du ein If getroffen hast in eine andere Methode umleiten - auch das macht es lesbarer.

Du wirst aber nicht drumherum kommen jeden Fall selbst auszuprogrammieren

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

S
sooks82 Themenstarter:in
16 Beiträge seit 2011
vor 12 Jahren

Mh, schade. Naja, trozdem danke. Geht übrigens um das Spiel Türme von Hanoi 😉 Es soll spielbar sein und sich (wenn ich das geschafft hab) auch selbst lösen können 😉.

C
1.214 Beiträge seit 2006
vor 12 Jahren

Ich verstehe die Frage nicht, hab nur eine vage Vorstellung von dem, was du machen willst. Du könntest aber z.B. Dictionaries in Erwägung ziehen. Oder eine eigene Klasse, die eine Variable abstrahiert, dann eine Liste mit Variablen anlegen und in der Schleife prüfen, was eingegeben wurde. Was schöneres als 9 if-then-else wirds fast immer.

S
sooks82 Themenstarter:in
16 Beiträge seit 2011
vor 12 Jahren

Naja, ich möchte eben durch die Eingabe eine Variable, deren Name wie die Eingabe lautet, identifizieren. Also:


eingabe = Console.ReadLine();
eingabe.TuIrgendwas;

Wobei die Eingabe dann a, b, oder c wäre, wofür ich dann Variablen mit diesen Namen hab. Wenn die Eingabe a ist, soll er also


a.TuIrgendwas;

machen 😉

2.298 Beiträge seit 2010
vor 12 Jahren

Hier bietet sich doch das angesprochene Dictionary vollkommen an.



Dictionary<String, MyObject> inputOptions = new Dictionary<String, MyObject>();
// einträge hinzufügen
//.....


string eingabe = Console.ReadLine();
MyObject object = inputOptions[eingabe];
object.TuIrgendEtwas();

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

S
sooks82 Themenstarter:in
16 Beiträge seit 2011
vor 12 Jahren

Danke. Habe damit noch nie gearbeitet und werds dann irgendwann anders ausprobieren...jetzt habe ich mir die Arbeit ohnehin schon gemacht 😉

K
62 Beiträge seit 2009
vor 12 Jahren

Das kommt mir zu einfach vor 😉

    public delegate T MethodDel<T, T1>(T1 paramArgs);

    public class MethodList<T, T1>
    {
        private static Dictionary<string, MethodDel<T, T1>> Methods { get; set; }

        public MethodList()
        {
            Methods = new Dictionary<string, MethodDel<T, T1>>();
        }

        public void Register(string methodKey, MethodDel<T, T1> method)
        {
            if (!Methods.ContainsKey(methodKey))
                Methods.Add(methodKey, method);
        }

        public MethodDel<T, T1> this[string methodKey]
        {
            get
            {
                if (Methods.ContainsKey(methodKey))
                    return Methods[methodKey];

                return ((T1 b) => { Trace.WriteLine(string.Format("Method not implemented ({0})", methodKey)); return default(T); });
            }
        }
    }

    public static class MethodFactory<T, T1>
    {
        public static MethodList<T, T1> Methods { get; private set; }

        static MethodFactory()
        {
            Methods = new MethodList<T, T1>();
        }

        public static void Register(string methodKey, MethodDel<T, T1> method)
        {
            Methods.Register(methodKey, method);
        }
    }

Da kann man ganz "einfach" seine Methoden registrieren


public int Method1(int param)
{
    Console.WriteLine("Method1");

    return 0;
}

public int Method2(int param)
{
    Console.WriteLine("Method2");

    return 0;
}

...

MethodFactory<int,int>.Register("a", Method1);
MethodFactory<int,int>.Register("b", Method2);
MethodFactory<int,int>.Register("c", testClass.Method3);

und das ganze dann über

string eingabe = Console.ReadLine();
int param = 10;

MethodFactory<int, int>.Methods[eingabe](param);

aufrufen. Über den Sinn und Unsinn lässt sich hierbei natürlich streiten, aber zumindest kommen kaum if's drin vor 😉

Hinweis von herbivore vor 12 Jahren

Es ist leider nicht das erste Mal, dass du mich zwingst auf [Hinweis] Wie poste ich richtig? Punkt 1.1.1 hinzuweisen. Ich muss mich also wiederholen: Bitte arbeite zunächst ein gutes C# (und bei Bedarf auch Windows Forms) Buch durch und stelle erst danach Fragen im Forum! myCSharp.de ist kein reines Anfängerforum. Ich bitte dich dringlich, deine Eigeninteressen über die Zielrichtung der Community zu stellen.

Thema geschlossen