In the above sample the <code>Hashtable</code> class is only capable of associating a <code>String</code> key with a value of <code>Object</code> type. Because in .NET all types (saveexcept pointers[[pointer]]s) ultimately derive from <code>Object</code>, anything can be put into a <code>Hashtable</code>, even data of different types. This could lead to errors if consuming code expects data to be of a singular type. In the above code casting is required to convert the Object variables back to their original type. Additionally, casting value-types (structures such as integers) to <code>Object</code> to put into the <code>Hashtable</code> and casting them back requires boxing/unboxing which incurs both a slight performance penalty and pollutes the heap with garbage. This changes in C# 2.0 with generic hashtables called dictionaries. There are significant performance and reliability gains to these strongly typed collections because they do not require boxing/unboxing or explicit type casts and introduce compile-time type checks.