Compatibilità C # 3.0 su .Net 2.0
-
05-07-2019 - |
Domanda
Quali sono le caratteristiche del linguaggio C # 3.0 che possiamo usare in un'applicazione destinata al framework .Net 2.0?
PS: conosco poche espressioni Lambda e var
parola chiave
Soluzione
Vedi qui:
Uso della sintassi C # 3.0 (.Net 3.5) in un'applicazione .Net 2.0
Per una descrizione completa di ciò che è possibile e non è possibile fare quando si utilizza .NET Framework 2.0 e si utilizza C # 3.0.
In sintesi:
- non puoi utilizzare i nuovi assiemi 3.5 (System.Data.Linq, System.Xml.Linq, System.Core).
- non puoi utilizzare Linq / Query Estensioni o Metodi di estensione (tuttavia, vedi sotto per modi per abilitare l'uso della sintassi Linq / Query e dei metodi di estensione!).
- Puoi puoi utilizzare la parola chiave Var , Dichiarazioni lambda , Inizializzatori di oggetti , Tipi anonimi & amp; Proprietà implementate automaticamente .
I metodi di estensione in qualche modo funzionano, tuttavia richiedono " System.Runtime.CompilerServices.ExtensionAttribute " per funzionare, e questo tipo si trova nella DLL System.Core (che non fa parte strettamente del framework .NET 2.0).
La sintassi della query non può essere utilizzata " out of the box " per così dire, tuttavia, può essere utilizzato se una DLL di terze parti (come LINQBridge ) viene utilizzato. Questa DLL reimplementa efficacemente molti dei "mancanti" tipi necessari per eseguire LINQ quando si utilizza il framework .NET 2.0. Implementa anche l '"ExtensionAttribute" tipo necessario per far funzionare i metodi di estensione, quindi semplicemente aggiungendo / facendo riferimento alla DLL LINQBridge dal tuo progetto abiliterai LINQ, sintassi delle query / espressioni e metodi di estensione!
Altri suggerimenti
Ho un proprio su questo argomento .
In breve:
supportati:
- Proprietà implementate automaticamente, variabili e matrici locali tipizzate in modo implicito, inizializzatori di oggetti e raccolte, tipi anonimi, metodi parziali, espressioni lambda convertite in tipi delegati.
Parzialmente supportato:
- Metodi di estensione (richiede un attributo) ed espressioni di query (richiede qualcosa come LINQBridge per essere utili)
Non supportato:
- Lambdas convertiti in alberi delle espressioni
In effetti, ho sentito che la conversione in alberi di espressione è disponibile con l'aiuto dell'implementazione di Mono di System.Core
. Non l'ho ancora provato però ... Continuo a significare farlo (e quindi aggiornare la pagina).