Laden...

Observable Collection Typ zur Laufzeit festlegen

Erstellt von Mini25 vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.472 Views
M
Mini25 Themenstarter:in
45 Beiträge seit 2010
vor 13 Jahren
Observable Collection Typ zur Laufzeit festlegen

Hallo Leute,

ich möchte eine Funktion schreiben die folgendes macht:

  • ObservableCollection<object> wird übergeben + Name des Properties
  • ObservableCollection<object> wir in ObservableCollection<TypvonerstemElement> konvertier.
  • Danach wird der Wert, den das Property zurückliefert über eine Messagebox ausgegeben.

Ist dies so wie ich mir das vorstelle realisierbar? Wenn ja, wie?

Ich habe eigentlich alles bis auf die Konvertierung schon realisiert. Nur kann ich nicht auf das Property zugreifen, wenn die Collection vom Typ object ist.

Mit freundlichen Grüßen
Mini25

1.552 Beiträge seit 2010
vor 13 Jahren

Hallo Mini25, Generics heißt das Zauberwort

public class MySuperGenericClass<T>
{
    public ObservableCollection<T> MyOCollection;
}

var msgc = MySuperGenericClass<string>();
msgc.MyOCollection.Add("jkj");

var msgc1 = MySuperGenericClass<int>();
msgc1.MyOCollection.Add("jkj"); //geht nicht
msgc1.MyOCollection.Add(1); //geht nicht


Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Mini25,

Observable Collection Typ zur Laufzeit festlegen

bei Generics muss der Typ immer zur Compliezeit feststehen (wie üblich bildet da nur Reflection eine Ausnahme)

herbivore

U
282 Beiträge seit 2008
vor 13 Jahren

Ich vermute, dass dem OP das klar ist. Ohne Reflection kommt man nur mit dem Namen eines Properties ja eh nicht an das Property dran. Insofern ist die Hauptfrage IMHO, wie man per Reflection eine Instanz einer Generischen Klasse erzeugen kann.

Die Frage die ich mir Stelle ist dabei, wie man die Collection dann weiterverarbeiten will. Weil ich sie ja niemals auf einen konkreten Typ Casten kann. Insofern wäre es evtl. sinnvoller, mit einer ObservableCollection<object> weiterzuarbeiten, wo eben die Werte des Properties drin stehen.

@Mini25
hast du denn wirklich nur den Namen des Properties? Wenn du das z.B. über eine lambda-expression auswerten könntest, wäre es einfacher. In Welchem Kontext brauchst du das denn?

849 Beiträge seit 2006
vor 13 Jahren

? Wieso überhaup zu ObservableCollection<Irgendwas> casten (was ja auch nicht fluppt)? OC implementiert doch eh IEnumerable.

erstes Item holen, und dann per Reflction auf das Property drauf zugreifen.

I
279 Beiträge seit 2008
vor 13 Jahren

Insofern ist die Hauptfrage IMHO, wie man per Reflection eine Instanz einer Generischen Klasse erzeugen kann.

Das geht mittels:


Type typeOfOC = typeof(ObservableCollection<>);
ObservableCollection<DeinTyp> deineOC = typeOfOC.MakeGenericType(typeof(DeinTyp)) as ObservableCollection<DeinTyp>;

So in der Art 😄