captmcneil
Ensign
- Registriert
- Juni 2005
- Beiträge
- 189
Hallo,
ich habe eigentlich eher mit Java zu tun, aber derzeit versuche ich privat, etwas mit .Net zusammenzubauen. Dabei fliege ich natürlich regelmäßig auf die Nase, weil ein paar Dinge eben in der einen Welt nicht so tun, wie in der anderen
In Java beruhen Generics ja auf diesem Type-Erasure-Ansatz, also sind nur für den Programmierer da, bringen zur Laufzeit aber absolut nichts. Dass das in C# anders ist, und es deshalb dort u.a. keine Wildcards gibt, habe ich mittlerweile verstanden. Allerdings scheint mir mein Anwendungsfall nicht so abnormal zu sein, als dass es hierzu keine vernünftige C#-Lösung geben kann.
Zum Problem:
Ich habe eine Liste mit Listen, wobei letztere beliebigen Typs sein sollen. In Java würde ich das ganze so schreiben:
in C# bekomme ich hier ein Problem, List<List<object>> tut natürlich nicht.
Das ganze lässt sich natürlich übertragen, wenn ich eine Liste mit generischen Interfaces haben möchte, was ja nun nicht so unüblich wäre:
Wie würde man sowas in C# machen? Das Interface nicht generisch gestalten, macht ja den ganzen Vorteil von Generics kaputt, da ich die Rückgabe von doCoolStuff ja überall casten müsste. Gibt es nicht-generische Listen für sowas? Kann man was mit Arrays drehen? Ich brauch die Objekte nur in einer Form, wo die Reihenfolge fest ist.
ich habe eigentlich eher mit Java zu tun, aber derzeit versuche ich privat, etwas mit .Net zusammenzubauen. Dabei fliege ich natürlich regelmäßig auf die Nase, weil ein paar Dinge eben in der einen Welt nicht so tun, wie in der anderen
In Java beruhen Generics ja auf diesem Type-Erasure-Ansatz, also sind nur für den Programmierer da, bringen zur Laufzeit aber absolut nichts. Dass das in C# anders ist, und es deshalb dort u.a. keine Wildcards gibt, habe ich mittlerweile verstanden. Allerdings scheint mir mein Anwendungsfall nicht so abnormal zu sein, als dass es hierzu keine vernünftige C#-Lösung geben kann.
Zum Problem:
Ich habe eine Liste mit Listen, wobei letztere beliebigen Typs sein sollen. In Java würde ich das ganze so schreiben:
Code:
List<List<?>> myListOfLists = new List<List<?>>();
myListOfLists.add(new ArrayList<String>());
myListOfLists.add(new ArrayList<Integer>());
...
in C# bekomme ich hier ein Problem, List<List<object>> tut natürlich nicht.
Das ganze lässt sich natürlich übertragen, wenn ich eine Liste mit generischen Interfaces haben möchte, was ja nun nicht so unüblich wäre:
Code:
interface MyGenericInterfaceIF<T> {
T doCoolStuff();
}
public class CoolStringStuff implements MyGenericInterfaceIF<String> {
public String doCoolStuff() {
....
}
}
public class CoolIntegerStuff implements MyGenericInterfaceIF<Integer> {
public Integer doCoolStuff() {
....
}
}
...
public List<MyGenericInterfaceIF<?>> getCoolThings() {
List<MyGenericInterfaceIF<?>> ret = new ArrayList<MyGenericInterfaceIF<?>>();
ret.add(new CoolStringStuff());
ret.add(new CoolIntegerStuff());
return ret;
}
Wie würde man sowas in C# machen? Das Interface nicht generisch gestalten, macht ja den ganzen Vorteil von Generics kaputt, da ich die Rückgabe von doCoolStuff ja überall casten müsste. Gibt es nicht-generische Listen für sowas? Kann man was mit Arrays drehen? Ich brauch die Objekte nur in einer Form, wo die Reihenfolge fest ist.