method expressions expresiones ejemplos bodied c# expression

expressions - if lambda c#



¿Cuáles son algunos ejemplos en los que los árboles de expresión son útiles? (3)

¿O solo es útil como mecanismo de transporte para el código?

Es útil como un mecanismo de ejecución para el código. Usando el patrón de intérprete , los árboles de expresión se pueden interpretar directamente. Esto es útil porque es muy fácil y rápido de implementar. Dichos intérpretes son omnipresentes y se usan incluso en casos que no parecen "interpretar" nada, por ejemplo, para imprimir estructuras anidadas.

Entiendo completamente el concepto de árboles de expresión, pero me está costando mucho tratar de encontrar situaciones en las que sean útiles. ¿Hay alguna instancia específica en la que se puedan aplicar árboles de expresiones? ¿O solo es útil como mecanismo de transporte para el código? Siento que me falta algo aquí. ¡Gracias!


Algunos marcos de burlas de prueba de unidad hacen uso de árboles de expresión para configurar expectativas / verificaciones fuertemente tipadas. Es decir:

myMock.Verify(m => m.SomeMethod(someObject)); // tells moq to verify that the method // SomeMethod was called with // someObject as the argument

Aquí, la expresión nunca se ejecuta realmente, pero la expresión en sí contiene la información interesante. La alternativa sin árboles de expresión sería

myMock.Verify("SomeMethod", someObject) // we''ve lost the strong typing


Los árboles de expresión son útiles cuando necesita acceder a la lógica de la función para modificarla o volver a aplicarla de alguna manera.

Linq to SQL es un buen ejemplo:

//a linq to sql statement var recs ( from rec in LinqDataContext.Table where rec.IntField > 5 select rec );

Si no tuviéramos árboles de expresión, esta declaración tendría que devolver todos los registros, y luego aplicar la lógica C # donde cada uno.

Con árboles de expresiones where rec.IntField > 5 se puede analizar en SQL:

--SQL statment executed select * from [table] where [table].[IntField] > 5