Implizit typisierte LambdaausdrückeImplicitly typed lambda expressions

Ich verwenden var nicht, um diese Ausdrucksbaumstruktur zu deklarieren.I'm not using var to declare this expression tree. Sie können keine implizit typisierte Variablendeklaration verwenden, um einen Lambdaausdruck zu deklarieren.You can't use an implicitly typed variable declaration to declare a lambda expression. Dadurch entsteht ein zirkuläres logisches Problem für den Compiler.It creates a circular logic problem for the compiler. Die Deklaration var stellt den Compiler an, den Variablentyp aus dem Ausdruckstyp rechts vom Zuweisungsoperator abzuleiten.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. Ein Lambdaausdruck hat keinen Kompilierzeittyp, kann aber in jeden beliebigen passenden Delegats- oder Ausdruckstyp konvertiert werden.A lambda expression does not have a compile time type, but is convertible to any matching delegate or expression type. Wenn Sie einer Variablen eines Delegats- oder Ausdruckstyps einen Lambdaausdruck zuweisen, sagen Sie damit dem Compiler, dass er den Lambdaausdruck, wenn möglich, in einen Ausdruck oder Delegat konvertieren soll, der der Signatur der zugewiesenen Variablen entspricht.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. Der Compiler muss versuchen zu erreichen, dass das Objekt, das sich rechts von der Zuweisung befindet, mit dem Typen links von der Zuweisung übereinstimmt.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.

Die Objekte, die sich jeweils neben dem Compiler befinden, dürfen dem Compiler nicht auftragen, sich das Objekt auf der jeweils anderen Seite des Zuweisungsoperators anzuschauen, um festzustellen, ob der Typ dieses Objekts mit dem jeweils anderen Objekt übereinstimmt.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.

Sie können Sich in diesem Artikel darüber informieren, warum die C#-Programmiersprachen dieses Verhalten vorgibt (zum Download als PDF-Datei)You can get even more details on why the C# language specifies that behavior by reading this article (PDF Download)