Compatibilidad con C # 3.0 en .Net 2.0
-
05-07-2019 - |
Pregunta
¿Cuáles son las características de lenguaje C # 3.0 que podemos usar en una aplicación que se enfoca en el marco .Net 2.0?
PS: conozco algunas como Lambda expresiones y var
keyword
Solución
Por favor vea aquí:
Usar la sintaxis de C # 3.0 (.Net 3.5) en una aplicación .Net 2.0
Para obtener un resumen completo de lo que puede y no puede hacer cuando se dirige a .NET 2.0 Framework y usa C # 3.0.
En resumen:
- Usted no puede usar los nuevos ensamblados 3.5 (System.Data.Linq, System.Xml.Linq, System.Core).
- Usted no puede usar Linq / Query Extensiones o Métodos de extensión (sin embargo, consulte más abajo para formas de habilitar el uso de Linq / Query Syntax y Extension Methods!).
- Usted puede usar palabra clave Var , declaraciones Lambda , Inicializadores de objetos , Tipos anónimos & amp; Propiedades implementadas automáticamente .
El tipo de trabajo de los métodos de extensión, sin embargo, requieren " System.Runtime.CompilerServices.ExtensionAttribute " para funcionar, y este tipo se encuentra dentro del System.Core DLL (que no es estrictamente parte del marco .NET 2.0).
La sintaxis de consultano se puede usar " fuera de la caja " por así decirlo, sin embargo, se puede usar si una DLL de terceros (como LINQBridge ) se utiliza. Esta DLL reimplementa efectivamente muchos de los " desaparecidos " los tipos que necesita para realizar LINQ cuando se dirige al marco .NET 2.0. También implementa el " ExtensionAttribute " El tipo necesario para que los métodos de Extensión funcionen, así que simplemente agregar / hacer referencia a la DLL LINQBridge de su proyecto habilitará LINQ, sintaxis de consulta / expresiones y métodos de extensión.
Otros consejos
Tengo un artículo sobre este tema .
En resumen:
Compatible:
- Propiedades implementadas automáticamente, variables y matrices locales de tipo implícito, inicializadores de objetos y colecciones, tipos anónimos, métodos parciales, expresiones lambda convertidas en tipos de delegado.
Parcialmente soportado:
- Métodos de extensión (requiere un atributo) y expresiones de consulta (requiere que algo como LINQBridge sea útil)
No es compatible:
- Lambdas convertidas en árboles de expresión
De hecho, he escuchado que la conversión en árboles de expresión está disponible con la ayuda de la implementación de Mono de System.Core
. Aún no lo he probado ... Sigo queriendo hacerlo (y luego actualizo la página).