Hi,
ich habe mir eine GUI zum Anlegen von Filtern geschrieben. Jeder Filter ist definiert als Expression<Func<T, bool>>.
Nun möchte ich alle Filter in einer Liste speichern. Der Haken dabei: das T ist nicht bei allen Filtern der gleiche Datentyp, es kann also einmal Expression<Func<string, bool>> sein, ein anderes Mal Expression<Func<MyDataType, bool>>. Zusatzinfo: Nicht alle Filter sind für ein und dasselbe Ziel gedacht, daher sind die unterschiedlichen Datentypen kein Widerspruch.
Nun dachte ich mir, das einfachste ist, ich verwende als Datentyp object, da das ja die Oberklasse von allem ist.
List<Expression<Func<object, bool>>> myList;
...
Wenn ich nun aber Daten einfügen will:
Expression<Func<MyDataType, bool>> myExpression = ...;
// das geht nicht
myList.Add(myExpression);
// das geht auch nicht:
myList.Add((Expression<Func<object, bool>>)myExpression)
dann meckert der Compiler, er könne Expression<Func<MyDataType,bool>> nicht umwandeln in Expression<Func<object, bool>>.
A) Warum kommt hier diese Fehlermeldung, wo object doch die "Überklasse" ist. In eine List<object> kann ich ja auch alles adden.
B) Wie muss ich die Liste definieren bzw. wie meine Expression einfügen, damit es geht, oder ist die einzige Alternative (wenn ich mir keine eigene Listenklasse anlegen will...), die ganze Expression-Liste als List<object> anzulegen?
gruß & danke
sth_Weird
Linux is for free...if your time is worth nothing
Fluchen ist die einzige Sprache, die jeder Programmierer perfekt beherrscht
++++++++++++++++++++~+
@sth_Weird
Es mag sein, dass object die Oberklasse aller Klassen ist.
Aber du versuchst hier, was der Compiler zu recht anmeckert, unterschiedliche Typen in die Liste zu packen.
Was su machen willst, klappt wegen der strengen Typisierung so nicht.
Für C# sind deine Expression<Func...> utnerschiedliche Typen.
Eine Mischung in einer Liste von unterschiedlichen Expressen Funcs wird nicht klappen.
Je nachdem wie dein Code augebaut ist, müsstest du ggf. eigene Listen pro Expression Typen anlegen und verwalten.
Dürfte aber ab einer bestimmten Menge ganz schön unübersichtlich werden.
Leider habe ich keine Lösung parat, dass ich diesen Fall noch nicht hatte.
Ober es überhaupt sinnvoll ist, deine Filter in einer Liste zu speichern, ist mir nicht ganz klar.
Gerade wegen der strengen Typisierung dürfte das zu vielen Problemen kommen.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Mach eine List<LambdaExpression> aus deiner myList.
Dass das dann funktioniert, erkaufst du dir allerdings damit, dass du bei der An/Auswertung des Filters die Signatur der Filtermethode wissen musst (damit du casten kannst).
LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
List<LambdaExpression> funktioniert, danke!
Linux is for free...if your time is worth nothing
Fluchen ist die einzige Sprache, die jeder Programmierer perfekt beherrscht
++++++++++++++++++++~+