Hay muchos artículos acerca de que las lambdas son cierres y algunas personas tienden a estar de acuerdo en que son sólo una parte de la verdad. Fortalezco el campo de los que están en la oposición. Las funciones de los lambda pueden ser implementadas como cierres, pero no son cierres en sí mismos. Esto realmente depende del contexto en el que se utiliza su aplicación y el entorno. Cuando creas una función lambda que utiliza variables no locales, debe ser implementada como un cierre.
Las expresiones lambda pueden tomar básicamente dos formas.

- Expresión lambdas
- Declaración lambdas
Las lambdas de expresión suelen tener este aspecto:
1Func<doble,doble,bool...; isItEqual =(x,y)=...; x == y;
csharp
Técnicamente, definimos los tipos de entrada y salida y proporcionamos una expresión que se evalúa en base al argumento, y luego se devuelve como resultado. A veces el compilador no puede inferir los tipos de entrada, así que puede querer estar seguro y especificarlos así.
1Func<doble,doble,bool...; isItEqual =(doble x,doble y)=...; x == y;
csharp
Las declaraciones de los lambdas suelen ser así:
1234Action<string...; Welcome = nombre ={{{{console.WriteLine($"Bienvenido {nombre} a la plataforma!");};
csharp
Fíjese en cómo el rizo de cierre también termina en punto y coma. Cuando trabajamos con la declaración lambdas , solemos crear múltiples expresiones – encapsularlas dentro de nuestra función. Estas son las mejores prácticas para crear una operación atómica; existen para un solo propósito/acción.
Ahora damos un giro brusco y combinamos las lambdas y los cierres.
123456789101112131415161718192021publicstaticpartialclassClosureDemo{publicstaticvoidOutside(){string notLocal ="Cierre basado en lambda!"; Func<string > demo =()=[ string local ="Esto es lambda, ";return local + notLocal;};string message =demo(); Consola. WriteLine($"El mensaje madriguera: {mensaje}");}}classLambdasNClosure{estaticvoidMain(string[] args){ ClosureDemo.Outside(); Console.ReadKey();}}
csharp
El resultado es el siguiente:
bash
En este ejemplo nuestra variable no local no cambió, sin embargo, esta situación puede no ser siempre cierta. Si la variable cambia, la función de referencia se verá afectada. A veces este es exactamente el caso que queremos lograr. Por ejemplo, podríamos tener una función que registre el cambio interno en el estado de una función con una función lambda. De esta manera, cada cambio de estado dará lugar a un registro diferente.