Die .NET CLR - Version 2.0

Typsicher und schneller

Versucht man nun, ein Objekt vom falschen Typ in der Instanz "personen" abzulegen, führt das zu einer Fehlermeldung des Compilers:

int i = 5;
personen.Add( i); // Hier tritt der Fehler auf

Der Compiler bemängelt, dass der Typ "Integer" nicht in ein Objekt vom Typ "Person" umgewandelt werden kann, und verweigert die Erzeugung von Code.

Die allgemeine ArrayList-Klasse hat aber auch einen anderen Nachteil, der mittels Generics behoben wird: Die Verwendung einer ArrayList kann durchaus zu Performance-Verlusten führen.

Der Grund dafür ist der, dass alle in einer ArrayList untergebrachten Objekte impliziert in ein System.Object umgewandelt werden. Man kann aber auch die so genannten Value-Types (also zum Beispiel "int") in einer ArrayList unterbringen - zu einem Preis: Das implizit durchgeführte boxing - also das Umwandeln des Value-Type in einen Reference-Type - beim Einfügen in die Liste und umgekehrt das unboxing beim Auslesen aus der Liste können durchaus zu einem Performance-Problem werden, wenn diese Operationen zu oft durchgeführt werden.

Bei der generischen List<T>-Klasse ist das nicht länger notwendig, denn hier werden tatsächlich die Value-Types direkt abgelegt.