PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C# - Dynamische Bennung von Variablennamen



Bauzi
01.05.2008, 11:44
Hi!

Meinen Algorythmus will ich objektorientiert und codesparend aufziehen. Dabei ergab sich bei mir folgendes Problem:

Ich möchte Variablen dynamisch bennen. So ungefähr stell ich mir das vor:


public void Funktion (string/ Variablenname)
{
int Row_<Variablenname> = 0;
[...]
Liste.Add(Row_<Variablenname>);
//d.h. ich will die Variable später noch ansprechen können
}
Die Variable wird später in einer Arrayliste abgelegt. Wenn die Variablen dann mit dynamischen Namen drinnen liegen würde, wäre es ein Hit (aber für meinen Code ist es dennoch nicht notwendig. Nur für die Übersicht). Klar könnte ich dem Objekt ein Attribute string name geben, aber hier bin ich mal überhaupt neugierig auf die Möglichkeit von dynamischen Namen.

Versteht ihr was ich damit meine? Wie Programmiere ich so etwas? Ich kenne die Syntax dazu nicht oder ob so etwas eigentlich möglich ist.

The Best Isaac
01.05.2008, 12:16
Ich hab bisschen gesucht und einen entsprechenden Thread auf myCSharp.de gefunden: http://www.mycsharp.de/wbb2/thread.php?threadid=14011
Da wird das sehr gut erkärt.

Bauzi
01.05.2008, 13:09
Ah verstehe. Jo im Endeffekt ist es wirklich besser so wenn es solche Dinge nicht gibt.

Danke für die Antwort!

Jesus_666
02.05.2008, 02:56
Es gibt exakt eine mir bekannte Sprache, die so etwas erlaubt: PHP (http://de3.php.net/manual/de/language.variables.variable.php). Tatsächlich kenne ich niemanden, der es tatsächlich benutzt, da man die gleiche Funktionalität auch mit erheblich saubereren und sichereren Mitteln erreichen kann.

R.D.
15.05.2008, 15:30
gehen tut das sicher mit allen progsprachen^^ wenn ichs richtig verstanden hab @.@''

Lukas
15.05.2008, 15:42
gehen tut das sicher mit allen progsprachen^^ wenn ichs richtig verstanden hab @.@''
Hast du offensichtlich nicht.

Whiz-zarD
15.05.2008, 16:31
Wieso sollte man auch eine Variable während der Laufzeit umbennen wollen?
Ich sehe da keinen Sinn drinnen.

Nor
15.05.2008, 16:53
Es gibt exakt eine mir bekannte Sprache, die so etwas erlaubt: PHP (http://de3.php.net/manual/de/language.variables.variable.php). Tatsächlich kenne ich niemanden, der es tatsächlich benutzt, da man die gleiche Funktionalität auch mit erheblich saubereren und sichereren Mitteln erreichen kann.

Hmm.. mit Hifle einer eval-Funktion müsste das theoretisch eigentlich auch in diversen anderen Scriptsprachen gehen (Javascript z.B.

eval(An_die_Funktion_uebergebener_Variablennamen_String = "Wert")

....AFAIR gibts ja eval auch in PHP). Weiß aber nicht welche Sprachen eine solche Funktion nochmitbringen. Aber das Schlüsselwort ist hier glaub ich "Scriptsprachen". In kompilierten Sprachen kann ich mir kaum vorstellen, wie das gehen soll. Kann mich aber auch irren..
Da es ja aber auch Javascript .NET gibt, könnte es EVENTUELL sein, dass du dir hierüber eine Assembly basteln kannst, die du dann in C# verwenden kannst. Ich hab das jetzt keinesfalls genau durchdacht (und hab auch noch nie mit Javascript .NET zu tun gehabt) - aber vielleicht ist das ein Ansatz!?

Wart mal...
...
...
mal sehen..

..

Hm.... Google hat mich da tatsächlich auf Folgendes gebracht:
http://www.odetocode.com/code/80.aspx

k.A. ob dir das aber tatsächlich hilft ^^" .

Crash-Override
15.05.2008, 20:04
Gibt es nicht C# Script in der .NET Runtime? Duerfte gehen, ist aber dennoch unsinnig, da sich dynamische Variabeln ueber Arrays viel sinnvoller verwalten lassen. Hab die Dinger noch nichtmal bei PHP jemals genutzt.

Xardas der Dunkle
17.05.2008, 21:52
In PHP brauch man sie eig. auch nur für den Zugriff und nicht für die Deklaration. Ich habes z.B. eben gerade erst für den kontrollierten Zugriff auf die globalen Request-Arrays gebraucht. (Da ja $_REQUEST, auch _COOKIE enthält, was man ja eig. nicht immer will).



/**
* Parameter auslesen
*
* @param string $name
* @param mixed $default
* @param string|array $type
* @param bool $multibyte
* @return mixed
* @access public
*/
public function get($name, $default = '', $type = Array('get', 'post')) {
static $types = Array(
'get' => '_GET',
'post' => '_POST',
'cookie' => '_COOKIE',
'files' => '_FILES',
);

// Daten ermitteln
if(is_array($type)) {
// Datenfelder durchlaufen
foreach($type AS $var) {
// Existiert das Feld?
if(!isset($types[StrToLower($var)])) {
trigger_error('Unexpected type <i>' . $var . '</i> for global Array.');
}

// Auslesen
$fName = $types[StrToLower($var)];
if(isset($$fName[$name]) && !empty($$fName[$name])) {
if($fName == '_COOKIE') {
return xSCF_Util::setType($_COOKIE[$this->cookieName][$name], gettype($default), true);
} else {
return xSCF_Util::setType($$fName[$name], gettype($default), true);
}
}
}
} elseif(is_string($type)) {
// Existiert das Feld?
if(!isset($types[StrToLower($type)])) {
trigger_error('Unexpected type <i>' . $type . '</i> for global Array.');
}

// Auslesen
$fName = $types[StrToLower($type)];
if(isset($$fName[$name]) && !empty($$fName[$name])) {
if($fName == '_COOKIE') {
return xSCF_Util::setType($_COOKIE[$this->cookieName][$name], gettype($default), true);
} else {
return xSCF_Util::setType($$fName[$name], gettype($default), true);
}
}
}

// Default-Wert
return $default;
}

mfG