Migration zu Generics
Die zwei großen Programmiersprachen haben unlängst Generics in ihren Sprachschatz mit aufgenommen. Eine feine Sache, vor allem für Collections… Jedoch verwenden viele Libraries noch die alten Collections auf Object. Ein Fallback auf alte Collections fällt meiner Meinung nach aus, da die bestehenden Probleme damit eher verstärkt werden. Was also tun?
public static IList<T> toGeneric<T>(IList basicList)
{
IList<T> genericList = new List<T>(basicList.Count);
foreach (Object currentObject in basicList)
genericList.Add((T)currentObject);
return genericList;
}
Dies konvertiert in C# eine normale Liste in eine generische List. Man kann hier natürlich noch diskutieren, ob IList hier das passende Interface zum Binden ist, oder nicht eher ICollection. Aber ich denke, da hat jeder so seine Vorliebe… Ich arbeite gerne auf IList, da ich ab und an mit Inserts und spezifischen Removes arbeiten muss.
Das ist ja schon ein recht netter Weg, aber die Frage ist jetzt, kann man das noch effizienter und schicker machen? Vielleicht zur Inspiration einige Kritikpunkte an meinem eigenen Code:
- Die Bindung an eine spezielle IList-Implementierung innerhalb der Methode gefällt mir nicht
- Schön wäre auch eine bessere Performance. Die Datenstruktur wird ja hier neu aufgebaut. Aber ich glaube da kommt man nicht drumherum.
Am 7. June 2006 um 11:56 Uhr
Oh, oh… wegen “die zwei großen Programmiersprachen” kriegst du Ärger mit Markus, wenn er das liest *g*
Am 7. June 2006 um 11:58 Uhr
Ja ich weiß… und ich freu mich schon drauf. :)
Am 7. June 2006 um 15:30 Uhr
§%”@%= !!!!
Soviel zum Ärger (das tat gut ;-) )
Ist das in C# auch so, daß die Generics nur Compile-Time-Wrapper um die nicht-generischen Varianten sind (wie in Java)?
Dann finde ich es ungeschickt, daß man eine List nicht zu einer List “erheben” kann. Da müßte doch nur eine Typprüfung erfolgen… ach ne… Denkfehler. Fliegt dann noch eine Referenz auf die ursprüngliche Liste rum, dann gute Nacht.
Wer hat eigentlich außer Microsoft jemals C# gebraucht?
Und _wozu_ hat Microsoft zig Sprachen für .NET, wenn sie alle mehr oder weniger dasselbe können (müssen)? Und wozu .NET? Fragen über Fragen…
Am 7. June 2006 um 20:57 Uhr
Bei deiner ersten Frage bin ich mir nicht ganz sicher, glaube aber das das wie in Java ist. Meine Erlebnisse beim Decompilen sprechen hier dafür.
Unter Linux wird ja mittlerweile auch fleißig (unter Mono) C-sharped, wenn man einschlägigen Medien trauen kann. Die Zig Sprachen sind übrigens reiner Käse… Soweit ich das weiß ist der VB-Compiler z.B. nur so eine Art Präprozessor für den C# (oder C++) Compiler. .NET hat Microsoft wohl gemacht um auch mal in einer VM zu laufen. Warum man da nicht auf Java gesetzt hat… Naja… Microsoft eben… ;)
Im Vergleich zu früher ist die Entwicklung für Microsoft Platformen jetzt auf jeden deutlich schmerzfreier…