# data[].attributes.body
Hemos llegado al año 2005 cuando se lanzó C# 2.0. Muchos consideran que esta es la primera versión del lenguaje lo suficientemente madura para ser utilizada en proyectos reales. Introdujo muchas funcionalidades de las que no podemos prescindir hoy en día, aunque la más importante e impactante de todas fue, sin duda, el soporte de los genéricos.

# data[].attributes.body
C# 3.0 del año 2007 fue otro hito importante en el desarrollo del lenguaje. Las funcionalidades introducidas giran en torno a la posibilidad de utilizar LINQ

Los métodos de extensión aparentan ser llamados como miembros de un tipo aunque estén definidos en otra parte.

Las expresiones lambda proporcionan una sintaxis más corta para los métodos anónimos.

Los tipos anónimos son tipos ad-hoc que no tienen que ser definidos de antemano.

Todo lo anterior nos ha llevado al método de sintaxis LINQ al que todos estamos tan acostumbrados hoy en día:

Antes de C# 3.0, no había manera de escribir dicho código declarativo en C#. La funcionalidad tenía que ser codificada imperativament.

Obsérvese cómo usé el tipo completo para declarar la variable en la primera línea de código. La palabra clave var que la mayoría de nosotros usamos todo el tiempo también fue introducida en C# 3.0.

# data[].attributes.body
En 2010, se lanzó C# 4.0.

Se enfocó en el enlace dinámico para simplificar la interoperabilidad con COM y los lenguajes dinámicos. Dado que Microsoft Office y muchas otras aplicaciones de gran tamaño pueden ahora ampliarse utilizando la plataforma .NET directamente sin depender de la interoperabilidad COM, vemos poco uso del enlace dinámico en la mayoría del código C# en la actualidad.

Para obtener más información sobre enlaces dinámicos, consulta mi artículo Enlace dinámico en C# (en inglés) en la revista DNC. No obstante, al mismo tiempo se añadió una funcionalidad importante, que se convirtió en parte esencial del lenguaje y que hoy en día se utiliza con mucha frecuencia sin que se le dé demasiada importancia: los parámetros opcionales y con nombre. Son una gran alternativa a la programación de muchas sobrecargas de la misma función

# data[].attributes.body
Microsoft lanzó C# 5.0 en 2012 e introdujo una nueva función de lenguaje muy importante.
Hizo que la programación asíncrona fuera mucho más accesible para todos. La funcionalidad iba acompañada de un amplio conjunto de nuevos métodos asíncronos para operaciones de entrada y salida en el framework .NET 4.5, que se lanzó al mismo tiempo.

Con la nueva sintaxis, el código asíncrono se parecía mucho al código sincrónico:

En caso de que no estés familiarizado con las palabras clave async y await, ten en cuenta que la llamada de I/O al método ReadToEnd Async no tiene bloqueos. La palabra clave await libera el hilo para otros usos hasta que el fichero leído se complete de forma asíncrona. Es entonces cuando la ejecución continúa de nuevo en el mismo hilo (la mayoría de las veces). Sin la sintaxis async/await, el mismo código sería mucho más difícil de escribir y de entender:

# data[].attributes.attachment_link.title
WCF Asynchronous Programming : C#5.0 Async and Await using Visual studio 2012

# data[].attributes.body
C# 6.0 fue lanzado en 2015. Coincidió con la completa reprogramación del compilador, denominado Roslyn. Una parte importante de esta versión fueron los servicios de compilación que desde entonces se han utilizado con gran éxito en Visual Studio y otros editores:

Visual Studio 2015 y 2017 lo utilizan para el resaltado de sintaxis, navegación por el código, refactorización y otras funciones de edición de código.

Muchos otros editores, como Visual Studio Code, Sublime Text, Emacs y otros, proporcionan funcionalidades similares con la ayuda de OmniSharp, un conjunto independiente de herramientas para C# diseñado para integrarse en los editores de código.

Muchos analizadores de código estáticos de terceros utilizan los servicios del lenguaje como base. Éstos pueden ser usados dentro de Visual Studio, pero también en el proceso de compilación.

# data[].attributes.attachment_link.title
C# 6.0  New Features-Top 10 Cool Features

# data[].attributes.body
En el momento en el que se escribió este artículo, la última versión principal era la 7.0. Su lanzamiento fue en 2017, que sigue siendo bastante reciente, y por lo tanto sus nuevas funcionalidades aún no se utilizan a menudo.

La mayoría de nosotros todavía estamos muy habituados a programar en C# sin aprovechar su potencia ni todas las ventajas que nos ofrece.

La característica principal de C# 7.0 era la búsqueda de patrones que añadía soporte en la comprobación de tipos en sentencias

En el momento en el que se escribió este artículo, la última versión principal era la 7.0. Su lanzamiento fue en 2017, que sigue siendo bastante reciente, y por lo tanto sus nuevas funcionalidades aún no se utilizan a menudo.

La mayoría de nosotros todavía estamos muy habituados a programar en C# sin aprovechar su potencia ni todas las ventajas que nos ofrece.

La característica principal de C# 7.0 era la búsqueda de patrones que añadía soporte en la comprobación de tipos en sentencias