Weiß einer ob das geht und wenn ja wie?



  • Hallo,

    ich suche eine mögliche Lösung oder Ideen für folgendes Problem.
    Ich möchte, wenn ich nur den string eines Objektes kenne dem Objekt etwas zuweisen. Ich gebe zB in einer Konsole oder was auch immer den Namen eines Objektes ein:

    > zahl 13
    und möchte Zahl im Programm dann die 13 zuweisen.

    Ich möchte das Problem aber nicht mit "if then else" oder "case" oder sonstigen abfragen Lösen. Sondern möchte das Objekt über diesen String suchen und dann automatisch zuweisen lassen um möglichst viel schreibarbeit zu sparen. Ist soetwas möglich?

    MfG



  • Du suchst die Dictionary-Datenstruktur.

    Dictionary<string, object> objects = new Dictionary<string, object>();
    
    // Wert hinzufügen:
    objects.Add("zahl", 24);
    
    // Verändern, Auslesen:
    objects["zahl"] = 42;
    Console.WriteLine(objects["zahl"]);
    
    // Alternative zum Anlegen:
    objects["anderes"] = "Test";
    
    // Löschen:
    objects.Remve("zahl");
    


  • Hm. Ich denke er will Reflection...



  • Danke für die Antwort,

    aber wie schon erwähnt denke ich wäre die Lösung die ich suche nur mit Reflections lösbar. Solch eine Lösung habe ich auch schon aber ich such etwas wo das Objekt selsbtändig gesucht wird und mir geliefert wird und ich dann zuweisen kann, zB in einer Klasse:

    ich liefer den string und mir wird das objekt dazu geliefert...

    Dictionary und allg. über schlüssel wäre ja auch wieder mit schreibaufwand verbunden ..



  • T_R_o_u_B_L_E schrieb:

    Dictionary und allg. über schlüssel wäre ja auch wieder mit schreibaufwand verbunden ..

    Reflections sind mit mehr Schreibaufwand verbunden (und machen intern auch nix anderes als Dictionaries anzusprechen).



  • Dictionary erscheint mir hier wesentlich sauberer und lesbarer, es sei denn er will sowas wie variable Variablen.



  • B00nbuster schrieb:

    ...sauberer und lesbarer...

    Das auf jeden Fall



  • Konrad Rudolph schrieb:

    T_R_o_u_B_L_E schrieb:

    Dictionary und allg. über schlüssel wäre ja auch wieder mit schreibaufwand verbunden ..

    Reflections sind mit mehr Schreibaufwand verbunden (und machen intern auch nix anderes als Dictionaries anzusprechen).

    Das Problem ist, ich suche eine allgemein Lösung und keine spezial Lösung für bestimmte Variablen. Denn die bestimmten Variablen müssste ich somit alle in das Dictionarie hinzufügen. Der Aufwand ist solang vertretbar bis die Variablenanzahl überhand gewinnt und eine Allgemeinlösung mehr arbeit abnehmen kann. Die Frage war, ist sowas überhaupt möglich? Die Allgemeinlösung wäre so flexibel das ich für einen String ein Objekt erhalte, welches natürlich exisieren muss, aber ich nicht explizit in einer "if then else" oder in einer Datenstruktur wie Dictionarie angegeben habe.

    B00nbuster schrieb:

    Dictionary erscheint mir hier wesentlich sauberer und lesbarer, es sei denn er will sowas wie variable Variablen.

    Das ist richtig. Aber wenn oben beschrieben Lösung vorhanden wäre könnte man drüber hinwegsehen. Wenn eine sehr hohe anzahl objekte abgefragt werden müssten, ist eine Allgmeinlösung die das alles erledigt sehr viel angenehmer.

    Wäre halt interesant gewesen ob soetwas möglich ist.



  • Um was für Variablen geht es denn eigentlich? Felder eines Objekts? Dann geht folgender Code:

    class Foo {
        public int x;
    }
    
    Foo foo = new Foo();
    
    typeof(Foo).GetField("x").SetValue(foo, 42);
    Console.WriteLine(typeof(Foo).GetField("x").GetValue(foo));
    

    Bei nicht-öffentlichen Feldern muss man dann eben entsprechende BindingFlags angeben.



  • Danke das ist genau das was ich gesucht habe.
    Brauch das für Private Felder, mussm al schauen was ich bei den BindingFlags angeben muss, falls du es schon weißt würdest du mir nochmals sehr weiterhelfen. also nochmal vielen dank!


Anmelden zum Antworten