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.
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)
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 😉.
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.
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 😉
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 |
Danke. Habe damit noch nie gearbeitet und werds dann irgendwann anders ausprobieren...jetzt habe ich mir die Arbeit ohnehin schon gemacht 😉
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 😉
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.