Espressioni lambda tipizzate in modo implicitoImplicitly typed lambda expressions

Per dichiarare un'espressione lambda non è consentito dichiarare una variabile tipizzata in modo implicito,You can't use an implicitly typed variable declaration to declare a lambda expression. poiché causerebbe un problema di logica circolare per il compilatore.It creates a circular logic problem for the compiler. La dichiarazione di var richiede al compilatore di determinare il tipo della variabile dal tipo dell'espressione a destra dell'operatore di assegnazione.The var declaration tells the compiler to figure out the type of the variable from the type of expression on the right hand side of the assignment operator. Un'espressione lambda non ha un tipo in fase di compilazione, ma può essere convertita in un qualsiasi tipo di delegato o di espressione corrispondente.A lambda expression does not have a compile time type, but is convertible to any matching delegate or expression type. Quando si assegna un'espressione lambda a una variabile di tipo delegato o espressione, si indica al compilatore di tentare di convertire l'espressione lambda in un'espressione o in un delegato che corrisponda alla firma della variabile di destinazione dell'assegnazione.When you assign a lambda expression to a variable of a delegate or expression type, you tell the compiler to try and convert the lambda expression into an expression or delegate that matches the signature of the 'assigned to' variable. Il compilatore deve fare in modo che il tipo dell'elemento a destra dell'operatore di assegnazione corrisponda al tipo a sinistra di tale operatore.The compiler must try to make the thing on the right hand side of the assignment match the type on the left hand side of the assignment.

Nessuno dei lati dell'assegnazione può indicare al compilatore di esaminare l'oggetto del lato opposto dell'operatore di assegnazione per verificare se il tipo di tale oggetto corrisponde al proprio.Both sides of the assignment can't be telling the compiler to look at the object on the other side of the assignment operator and see if my type matches.

Per informazioni ancora più dettagliate sui motivi di tale comportamento del linguaggio C#, leggere questo articolo (file PDF per il download)You can get even more details on why the C# language specifies that behavior by reading this article (PDF Download)