Hallo Leute,
ich möchte eine Funktion schreiben die folgendes macht:
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
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
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
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?
? 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.
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 😄