Laden...

Wie kann ich zur Laufzeit neue Properties in ein Objekt hinzufügen?

Erstellt von CombatKarl vor 3 Jahren Letzter Beitrag vor 3 Jahren 734 Views
CombatKarl Themenstarter:in
36 Beiträge seit 2020
vor 3 Jahren
Wie kann ich zur Laufzeit neue Properties in ein Objekt hinzufügen?

Hallo zusammen,

als Beispiel habe ich folgendes Model:


    public class CarModel : ViewModelBase
    {
        public string Prop_1 { get; set; }
        public string Prop_2 { get; set; }
        public string Prop_3 { get; set; }
        public string Prop_4 { get; set; }
    }

Das MainViewModel sieht folgendermaßen aus:


    public class MainViewModel : ViewModelBase
    {
        public CarModel myCar = new CarModel();
    }

Jetzt die Frage:

Ist es möglich auf die einzelnen Eigenschaften des Models zuzugreifen, auch wenn sich die Zahl ändert und durch ein string oder int übergeben wird ? Ich denke dabei an so etwas wie:


    public class MainViewModel : ViewModelBase
    {
        public CarModel myCar = new CarModel();
        myCar.Prop_ & "1" = "irgendwas";
    }

Mich würde interessieren ob und wenn ja, wie, dies umgesetzt werden kann. Den Sinn und Unsinn solchen Codes lassen wir einfach mal außen vor.

Vielen Dank schon mal für Eure Hilfe !!

<--- Wer übt, ist feige ! --->

W
955 Beiträge seit 2010
vor 3 Jahren

Man könnte ein Dictionary<String, object> verwenden. Allerdings geht dann die OOP über den Haufen weil gecastet werden muss.

5.941 Beiträge seit 2005
vor 3 Jahren

Hallo CombatKarl

dynamic oder Dictionary<string, object>. Ist aber meistens ein Zeichen, dass da was falsch angegangen wird. Nummeriert Variabeln, wieso? Nutze Arrays oder Listen.

Grüsse

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

2.078 Beiträge seit 2012
vor 3 Jahren

Dynamische Properties gehen theoretisch (aber umständlich) mit DynamicObject.

Einfacher wäre, wie witte schon sagt, ein Dictionary und das ist auch gar nicht mal so unüblich, wenn man wirklich dynamische Daten braucht.
Nummerierte Properties sind aber vermutlich eher ein Zeichen für eine Auflistung.

Und es kann auch gut sein, dass Du da gerade einen strukturellen Fehler einbaust, aber das kannst nur Du sicher wissen.

Allerdings geht dann die OOP über den Haufen weil gecastet werden muss.

Das hat aber nicht wirklich etwas miteinander zu tun.
Die OOP ist ein Konzept, Casten musst Du aber so oder so, sobald Du mit verschiedenen Typen arbeiten willst.
"object" ist ja auch nur eine Klasse, von der alle anderen Typen implizit ableiten.

5.941 Beiträge seit 2005
vor 3 Jahren

Ich glaube witte meint damit, dass es nicht mehr reine Polymorphie ist.

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

W
955 Beiträge seit 2010
vor 3 Jahren

Danke,
Oder Komposition.

5.657 Beiträge seit 2006
vor 3 Jahren

Den Sinn und Unsinn solchen Codes lassen wir einfach mal außen vor.

Der Sinn des Ganzen wäre aber interessant, um eine echte Alternative aufzeigen zu können.

Ansonsten steht eigentlich alles dazu in [FAQ] Variablennamen zur Laufzeit zusammensetzen / Dynamisches Erzeugen von Controls

Weeks of programming can save you hours of planning