Verwendung von Eigenschaften im switch-Anweisung Fällen?
Ich habe eine switch-Anweisung in einer Klasse, die erzeugt Command-Objekte, basierend darauf, ob eine bestimmte Zeile in einem code-Datei entspricht, die insbesondere code für dieses Command-Objekt.
wie diese:
switch (line):
{
case "#CODE1":
return new Command1();
case "#CODE2":
return new Command2();
}
Möchte ich es in etwas so:
switch (line):
{
case Command1.Code:
return new Command1();
case Command2.Code:
return new Command2();
}
Habe ich versucht, indem Sie eine öffentliche statische Eigenschaft des Command1, aber der compiler beschwert sich...
Gibt es eine Möglichkeit, etwas zu tun, zusammen mit dieser Absicht, dass der compiler nicht meckern?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, Sie können dies tun, nur mit Konstanten... also, wenn es möglich für Sie ist, verwenden Sie Konstanten-Felder anstelle von öffentlichen, statischen Eigenschaften. Der Unterschied ist, dass es behandelt wie ein literal zur compile-Zeit, so dass, wenn der Wert geändert wird, müssen Sie kompilieren Sie alle Baugruppen, die Referenz der Konstante.
Schalter funktioniert nur auf numerische Datentypen und string-Typen, nicht Eigenschaften. Sie können versuchen, die Definition einer public string konstant auf Ihrem Command1 und Command2-Klasse, die Sie sollten in der Lage sein, zu schalten, statt.
da Sie das arbeiten mit strings bin ich mir nicht sicher, ob es der beste Ansatz, aber mit enums arbeitet für mich
Ich glaube, dein problem ist, dass Sie brauchen, um zu instanziieren Ihrer Objekte, bevor Sie bestimmen können, Ihre Immobilien-Werte.
Ich nehme an, Sie haben eine code-Datei mit dem Token-Anweisungen, wie:
und Sie wollen eine Klasse zum Lesen jeder Zeile in der Datei, und führen Sie dann je nachdem, was die Anweisungen des Token definieren.
Du hast es zu arbeiten, aber anstatt das zu tun einen direkten string-Vergleich des token in der Datei, die Sie möchten, dass der Wert des Tokens gespeichert, die in einer Eigenschaft Ihrer Objekte? Das problem bei diesem Ansatz ist, erstellen Sie eine neue Instanz des Objekts (Befehle 1 und 2), bevor Sie können sich auf Ihre Immobilien-Werte.
Wenn ich verstehe, was Sie getan haben und was Sie tun möchten, ich denke, deine Lösung war gut so wie es war. Ich bin mir nicht 100% sicher, dass ich wirklich verstehen, was Sie tun möchten, obwohl, oder warum.
HTH
Wenn Sie möchten, schauen Sie auf die Eigenschaften einer Klasse. Ich gehe davon aus, dass Sie wahrscheinlich wollen in der Lage sein, ändern Sie die Eigenschaften, und überprüfen Sie Sie entsprechend. Sie müssen verwenden Sie eine if, else if, else if type-Anweisung.
Wenn du hast eine jones verwenden eine switch-Anweisung, bist du SOL, es sei denn, Sie sind die überprüfung ein integraler Typ, der gegen Konstante Werte. if, else if, else if-Blöcke sind hässlich, aber es werde tun, was du bist suchen für.
Könnten Sie fallen immer wieder auf die erprobte und wahre if /else-block
Nicht so übel, oder?