C #: Erstellen einer Aktion "do-nothing" bei der Klasseninstanziierung [duplizieren]

7

Ich habe eine Klasse, in die der Benutzer eine Aktion einfügen kann (oder nicht).

%Vor%

Grundsätzlich kann ich für die Action keine Null in meine Basisklasse eintragen. Aber gleichzeitig möchte ich meinen Benutzer nicht dazu zwingen, ein Action zu übergeben. Stattdessen möchte ich in der Lage sein, spontan eine "nichts tun" -Aktion zu erstellen.     
michael 25.04.2011, 14:44
quelle

2 Antworten

33

Sie möchten sagen

%Vor%

Denken Sie so darüber nach. Sie benötigen t => anonymous-expression-body . In diesem Fall ist anonymous-expression-body ein expression oder ein block . Sie können keinen leeren Ausdruck haben, sodass Sie keinen leeren Methodenkörper mit einem expression angeben können. Daher müssen Sie block verwenden. In diesem Fall können Sie { } angeben, um anzugeben, dass a block eine leere statement-list hat und daher der leere Text ist.

Weitere Informationen finden Sie in der Grammatikspezifikation, Anhang B.

Und hier ist eine andere Art und Weise, darüber nachzudenken, eine Möglichkeit, die Sie verwenden könnten, um dies für sich selbst zu entdecken. Ein Action<T> ist eine Methode, die ein T übernimmt und void zurückgibt. Sie können eine Action<T> über eine nicht anonyme Methode oder über eine anonyme Methode definieren. Sie versuchen herauszufinden, wie man es mit einer anonymen Methode (oder vielmehr einer sehr speziellen anonymen Methode, nämlich einem Lambda-Ausdruck) macht. Wenn Sie dies über eine nicht-anonyme Methode tun möchten, würden Sie

sagen %Vor%

und dann könnte man sagen

%Vor%

verwendet das Konzept einer Methodengruppe. Aber jetzt wollen Sie dies in einen Lambda-Ausdruck übersetzen. Nehmen wir also diesen Methodenkörper und machen ihn zu einem Lambda-Ausdruck. Deshalb werfen wir das private void MyAction<T>(T t) weg und ersetzen es durch t => und kopieren wörtlich den Methodenkörper { } .

%Vor%

Boom.

    
jason 25.04.2011, 14:46
quelle
6

Sollte es nicht geschweiften Klammern sein?

%Vor%

Lambda Form (/*paramaters*/) => {/*body*}

Parenthesis um die Parameter können weggelassen werden, aber Curly Klammern um den Körper kann nur verzichtet werden, wenn es eine einzige (nicht leer) Aussage.

    
Brook 25.04.2011 14:46
quelle

Tags und Links