2009-07-28 15 views
13

Verzeihen Sie mir, wenn das Newbie schreit, aber was bedeutet => in C#? Ich war letzte Woche auf einer Präsentation und dieser Operator (glaube ich) wurde im Zusammenhang mit ORM verwendet. Ich habe nicht wirklich auf die Besonderheiten der Syntax geachtet, bis ich zu meinen Notizen zurückgekehrt bin.Was bedeutet "=>"?

+0

Dies ist ein Duplikat ist. Ich kann keinen finden, der eins ist. –

+0

Dies ist jedoch sehr schwierig zu suchen. Sogar auf Google. –

+0

Er wusste nicht, dass es "Lambda-Operator" genannt wurde. –

Antwort

13

In C# die lambda operator geschrieben "=>" (in der Regel ausgesprochen "geht an", wenn vorgelesen). Es bedeutet, dass die Argumente auf der linken Seite in den Codeblock (Lambda-Funktion/anonymer Delegat) auf der rechten Seite übergeben werden.

Wenn Sie also einen Func oder Action (oder einen ihrer Cousins ​​mit mehr Typparametern) haben, können Sie ihnen einen Lambda-Ausdruck zuweisen, anstatt einen Delegaten instanziieren zu müssen oder eine separate Methode für die verzögerte Verarbeitung zu haben:

//creates a Func that can be called later 
Func<int,bool> f = i => i <= 10; 
//calls the function with 12 substituted as the parameter 
bool ret = f(12); 
+4

Ich habe nie bemerkt, wie verwirrend es ist, wenn man Lambda mit 'weniger als oder gleich' klebt. Es sieht aus wie alle Pfeile, die auf i zeigen. –

1

Es ist ein Lambda-Operator, Teil einer lambda expression.

All Lambda-Ausdrücke verwenden, um das Lambda Operator =>, das gelesen wird, als " geht auf". Die linke Seite des Lambda Operators gibt den Eingang Parameter (falls vorhanden) an und die rechte Seite enthält den Ausdruck oder die Anweisung Block. Der Lambda-Ausdruck x => x * x wird gelesen "x geht zu x mal x."

7

Es ist eine Abkürzung für die Deklaration einer lambda.

i => i++ 

ist (Art) die gleiche wie Schreiben:

delegate(int i) 
{ 
    i++; 
} 

Im Rahmen von:

void DoSomething(Action<int> doSomething) 
{ 
    doSomething(1); 
} 

DoSomething(delegate(int i) { i++; }); 
//declares an anonymous method 
//and passes it to DoSomething 

die (eine Art) die gleiche wie Schreiben:

void increment(int i) 
{ 
    i++; 
} 

Nur ohne einen Namen zu geben, erlaubt es Ihnen deklarieren Sie eine Funktion in-line, die als "anonyme" Funktion bekannt ist.

3

Wenn gesagt, der Operator ist der Lambda (geht zu) -Operator, der hilft, den anonymen Delegaten zu definieren, den Sie im Lambda definieren.

Ein üblicher Ort, um dies zu sehen, ist mit einem Event-Handler. Sie werden oft aa Seite Lastart Ereignis haben, die von einem Lambda mit dem folgenden Code behandelt wird:

this.Loaded += (o, e) => { 

// code 

} 

Sie eine Methode definiert hat, anonym die Loaded Event-Handling (es keinen Namen hat) durch ein mit Lambda-Ausdruck. Es würde lauten wie "o, e geht zu ... Methodendefinition mit foo."

1

Es ist eine Syntax zum Deklarieren einer anonymen Funktion, in C# als "Lambda-Ausdruck" bekannt.

Beispielsweise steht (int p) => p * 2 für eine Funktion, die eine ganze Zahl annimmt und sie mit zwei multipliziert.

+0

Technisch ist der ganze Körper (int p) => p * 2 ein Lambda-Ausdruck. Das => ist nur der Lambda-Operator. –

3

Dies ist der "Lambda-Operator", und Sie lesen es als "geht zu". Sagen Sie bitte die Anweisung hatte:

doSomething(x => x + " hi"); 

Sie ersetzen die „=>“ in Ihrem Kopf mit diesem:

doSomething(delegate (string x) { return x + " hi" }); 

Wie Sie sehen können, ist es ein Heck einer Stenografie bietet. Der Compiler ermittelt den Typ der Variablen, die Sie übergeben, und ermöglicht es Ihnen, die Funktionssignatur und die Klammerung für den Code zu entfernen, an den Sie die Signaturvariablen übergeben.

+1

Sie können es auch lesen als "wird" oder "Karten zu" –

+1

Ich habe gehört "injiziert", "Pfeile", etwas vulgär werde ich hier nicht erwähnen, und ein paar andere. Mein Favorit ist bisher "gleich größer". – womp

+2

Ich sage jetzt einfach "Lambda", anstatt mir über die unzähligen möglichen Variationen Gedanken zu machen. –

8

Da niemand es noch erwähnt, in VB.NET würden Sie die Funktion Schlüsselwort anstelle von =>, etwa so:

dim func = function() true 
'or 
dim func1 = function(x, y) x + y 

dim result = func() ' result is True 
dim result1 = func1(5, 2) ' result is 7 
+1

Ich werde ohne Grund wieder abgelehnt. Der Typ, der die Frage gestellt hat, sagte, dass er ein VB.NET-Typ ist, also bietet eine Erklärung in Bezug auf VB.NET Sinn. –

+0

Sie haben seine spezifische Frage nicht beantwortet, aber ich verstehe nicht, warum ihm eine Information zu geben, die ihm helfen könnte, besser zu kommunizieren, was einen Downvote rechtfertigen würde. +1 um es zu negieren. – Brandon

+0

+1, ich war im Begriff, diese Antwort auch hinzuzufügen ... Crazy, dass jemand würde es downvote, es ist sehr nützlich, für einen VB.NET Kerl zu wissen ... –