Gli alberi di espressione sono una funzione linguistica di base o una funzione dell'oggetto/libreria BCL? È qualcosa che non puoi costruire senza le funzionalità linguistiche di base di C#?Espression Trees è una funzionalità di base del linguaggio C#?
risposta
No, gli alberi di espressione non sono una lingua. Sono utilizzabili da qualsiasi linguaggio .NET, quindi non possono essere specifici per C#. Sono tipi CLR ordinari definiti in un assembly incorporato.
La costruzione tramite espressioni lambda (e LINQ) è specifica C#. Ma puoi sempre costruire un equivalente Expression
manualmente. Il compilatore C# non fa altro che emettere chiamate ai ben noti metodi di costruzione statica Expression
. È possibile esaminare ciò che il compilatore emette decompilando il binario con Reflector configurato su una versione .NET precedente.
Se gli alberi di espressione utilizzano le API interne di .NET Framework è una domanda non correlata, ma non riesco a pensare a nessuna ragione per cui dovrebbero averne bisogno.
"No, non sono una caratteristica del linguaggio. Essi sono utilizzabili da qualsiasi linguaggio .NET in modo che non possano essere C# specifica." - Non è giusto. Sono * una * funzione del linguaggio di C# ... e F # ... e Visual Basic ... ---- Ognuno ha bisogno di conoscere la sintassi del linguaggio e tale da creare effettivamente un albero di espressioni dal testo nel file sorgente. –
@Timothy: No, ti riferisci alle espressioni _lambda_. _Queste_ sono caratteristiche linguistiche. Le classi 'Expression' sono solo classi .NET regolari. Tutto ciò che può utilizzare le classi .NET può utilizzare le classi 'Expression'. –
@JeffMercado Oh ... giusto. Stavo pensando che la domanda iniziale riguardasse la funzione lambda-expression-to-'Expression', non le stesse classi di 'Expression'. Sì, quelli non sono funzionalità linguistiche. :) –
Come si può vedere dalla definizione della classe Expression
, è definita nello spazio dei nomi System.Linq.Expressions
. In questo caso, Expression non è una funzione del linguaggio C#: è una classe consumabile da tutte le lingue che hanno come target il CLR.
Qui, ad esempio, è presente un articolo su MSDN intitolato "Expression Trees (C# and Visual Basic)" che illustra come creare e utilizzare alberi di espressioni mediante C# e VB.NET.
- 1. Estensione del linguaggio C#?
- 2. Quale parte del linguaggio C# è .ForEach()?
- 3. Linguaggio di base di python
- 4. Controllo funzionalità C++ 11
- 5. C# è un linguaggio di alto livello?
- 6. Arrotondare una data POSIX (POSIXct) con funzionalità di base R
- 7. Differenza tra Tries e Trees?
- 8. individuazione del carattere nella stringa linguaggio C
- 9. Perché C non è un linguaggio dinamico?
- 10. Estensione del linguaggio C#, quanto sforzo/guadagno?
- 11. Creazione Binary Search Trees
- 12. Esiste una specifica del linguaggio Python?
- 13. Iterator in linguaggio C
- 14. Estensione del file in linguaggio C
- 15. Dove posso inviare la richiesta di nuove funzionalità nel linguaggio C#?
- 16. Esiste una buona libreria di elaborazione del linguaggio naturale
- 17. Perché char è di 1 byte in linguaggio C
- 18. Hash Table v/s Trees
- 19. Limitare nuove funzionalità del linguaggio di Visual Basic in Visual Studio 2015
- 20. Sottosistemi di linguaggio C++ ufficiale
- 21. Clojure finger trees e flexvec
- 22. Elaborazione del linguaggio naturale - Conversione di funzionalità di testo in vettori Feature
- 23. Disponibilità di funzionalità C++ 11
- 24. del linguaggio C# Design: implementazione dell'interfaccia esplicita di un evento
- 25. linguaggio di scripting per C++
- 26. Operatori di linguaggio incorporato specifici del dominio C++
- 27. C# come linguaggio di scripting
- 28. funzionalità del criterio
- 29. Analisi lessicale del linguaggio di programmazione Python
- 30. linguaggio C: significato dell'operatore "#"?
Nella misura in cui esiste un cast implicito da una lambda della forma 'Func' a 'Expression >' che il compilatore deve eseguire in fase di compilazione, penso di si. –
È possibile utilizzare i metodi builder invece di tradurre un'espressione lambda in un albero di espressioni. Ma è * molto * più prolisso. – CodesInChaos
Di quale parte della funzione stai chiedendo? – SLaks