[EDIT]Dies ist ein Thread, auf den aus der FAQ verwiesen wird. Bitte keine weitere Diskussion, sondern nur wichtige Ergänzungen und diese bitte knapp und präzise. Vielen Dank![/EDIT]
Hi,
die frage stelle ich für einen Kollegen der in aspx eine Seite schreibt und ebenfalls wie ich von PHP kommt.
In PHP gibt es die Möglichkeit Variablennamen dynamisch zu bestimmen sprich:
for($i=1; $i < 4; $i++)
{
$varName = "Stirb_Langsam_" . $i;
$$varName = "Cooler Film";
}
Wenn $i jetzt eine Laufvariable ist die in dem Fall noch den Wert 3(Hoffentlich bald 4) hat.
Dann hätte ich 3 Variablen am Ende erstellt.
Also in C# wäre es schön wenn das so gehen würde, um mal deutlich zu machen was ich von euch überhaupt will, für die die kein PHP können 🙂
for(int i=1; i < 4; i++)
{
String "Stirb_Langsam_" + i;
}
Geht das auch irgendwie mit C#, weil das geht sogar in JavaScript und wenn es in C# nicht geht ist das ja schon fast arm 😉
mfg
Hallo Curse4Life,
nein das geht nicht, aber ich finde das gar nicht arm.
Es gibt genug Alternativen. Z.B. Arrays, die über String-Namen indizierbar sind.
Warum sollte man dann dynamische Variablennamen unterstützen? Ich würde es anders herum sehen. Bei PHP und JavaScript geht das, weil die Alternative zu 'hochwertig', bzw. zu kompliziert wäre, sie umzusetzen 😉
Hashtables und Dictionarys haben von Haus aus solche Eigenchaften.
Ciao
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
Bin auch der Meinung dass man durch die ganzen Möglichkeiten der verschiedenen Collections sowas gar net braucht. Für den Anfänger sicherlich leichter nachzuvollziehen wenn man einfach Variablennamen durchnummerieren kann statt über nen Array zu gehen, aber der praktische Nutzen ist doch bei fast 0.
Baka wa shinanakya naoranai.
Mein XING Profil.
arm sind dynamische variablennamen!
Wenn man sowas braucht, macht man einen Designfehler. Für was brauchst du var1 var 2 usw.? da macht man ein var[0] var[1] usw.
Arm oder nicht ist die falsche Frage, denn dynamische Variablennamen sind mit typisierten Sprachen nicht machbar. Aus qualitativer Sicht verschlechtern solche "Tricks" die Lesbarkeit und somit die Wartbarkeit von Code und sind somit eher abzulehnen. Zumal diese Tricks via Hashtables ohne Probleme sauber nachzubilden sind (Abbildung Schlüssel auf Wert).
PHP ist eine Skriptsprache. Der Vorteil von PHP ist, dass man solche Sachen machen kann. In kürzester Zeit kann man so passable Webseiten bauen. Dafür hat man bei PHP sehr schnell viel Spaghetti-Code.
Bei C# kann es nicht funktionieren, weil C# Code bei der Ausführung nicht interpretiert wird, sonder vorher übersetzt. Nach dem übersetzen ist der erzeugte Code (Im Fall von C# MSIL-Code) statisch. Deshalb wirst Du dieses Funktionsmerkmal nur bei Skriptsprachen finden.
Weder PHP noch C# ist also "arm".
Hallo zusammen,
ich schließe mich allen Antwortern an und will nichts in Frage stellen.
Nur eine kleine Anmerkung: Gerade durch den Zwischencode und durch die "Headerfreiheit/Selfcontaintness" von C# wären dynamische Zugriffe auf Variablen möglich: per Reflection.
Das ändert aber nichts daran, dass solche Zugriffe (und nicht das Fehlen der Zugriffe) arm sind. 🙂
herbivore
Und genau mit Reflection gehen auch dynamische Variablenbezeichner: System.Reflection.Emit ist die Lösung - einfach zur Laufzeit eine entsprechende Assembly erstellen und ausführen 😉 ... Am Beispiel TypeMock.Net sieht man, dass es unter gewissen Sicherheitstechnischen Voraussetzungen auch möglich ist bestehenden Code zur Laufzeit zu substituieren, also auch in dieser Hinsicht sind Möglichkeiten gegeben. Funktioniert aber eben nur durch die dynamische Ausführung des ganzen - die Vorteile einer statischen Übersetzung sind dahin und überdies gelten die Kritikpunkte meiner Vorposter.
Naja, wer mit TypeMock und oder Emit umgehen kann, braucht aber keine dynamischen
Variablen, der hat ja SW-Entwicklung an sich schon verstanden 😉