Otras características de C# 2.0 agregaron capacidades a las características existentes:
⮚Accesibilidad separada getter/setter
⮚Conversiones de grupos de métodos (delegados)
⮚Clases estáticas
⮚Delegar inferencia
Si bien C# pudo haber comenzado como un lenguaje genérico orientado a objetos (OO), la versión 2.0 de C# cambió eso rápidamente. Con los genéricos, los tipos y métodos pueden operar en un tipo arbitrario manteniendo la seguridad del tipo. Por ejemplo, tener una Lista le permite tener una Lista o una Lista y realizar operaciones con seguridad de tipos en esas cadenas o números enteros mientras los itera. Usar genéricos es mejor que crear un tipo ListInt que derive de ArrayList o convertir desde Object para cada operación.
La versión 2.0 de C# trajo iteradores. Para decirlo de manera sucinta, los iteradores le permiten examinar todos los elementos en una Lista (u otros tipos Enumerables) con un bucle foreach. Tener iteradores como parte de primera clase del lenguaje mejoró dramáticamente la legibilidad del lenguaje y la capacidad de las personas para razonar sobre el código.
Y, sin embargo, C# siguió tratando de ponerse al día con Java. Java ya había lanzado versiones que incluían genéricos e iteradores. Pero eso pronto cambiaría a medida que los idiomas continuaran separándose.