Wann Lamda-Expression nutzen

  • C#

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Pascalony.

    Wann Lamda-Expression nutzen

    Hey Forum,

    ich habe vor mein Vector-Struct nochmals zu überarbeiten und wollte Fragen wann es sinnvoll ist Lamda-Expressions zu benutzen. Zum Beispiel könnte ich ja statt

    C#-Quellcode

    1. public static Vector3 VectorProduct(Vector3 left, Vector3 right)
    2. {
    3. return new Vector3(left.Y * right.Z - left.Z * right.Y, left.Z * right.X - left.X * right.Z, left.X * right.Y - left.Y * right.X);
    4. }


    auch folgendes verwenden.

    C#-Quellcode

    1. public static Vector3 VectorProduct(Vector3 left, Vector3 right) => new Vector3(left.Y * right.Z - left.Z * right.Y, left.Z * right.X - left.X * right.Z, left.X * right.Y - left.Y * right.X);


    Bis jetzt habe ich Lamda-Expression nämlich nur bei kurzen Ausdrücken oder bei Delegates benutzt.

    C#-Quellcode

    1. public static Vector3 Zero => new Vector3(0, 0, 0);


    Gibt es da eine Art Guideline, an der ich mich orientieren kann? Ich habe nämlich z.B noch nie eine Klasse gesehen, bei der alle Methoden und überladene Operatoren die nur einen Expression als Code haben in Lamda-Expression umgeschrieben wurden.

    Pascalony schrieb:

    Bis jetzt habe ich Lamda-Expression nämlich nur bei kurzen Ausdrücken oder bei Delegates benutzt.
    Genau so tue ich es auch.
    Außerdem solltest Du zur Kenntnis nehmen, dass Du eine Prozedur, die einen Lambda-Ausdruck enthält, während des Debug-Breaks nicht editieren kannst.
    Und: Einen Lambda-Ausdruck selbst kann man nicht debuggen.
    Also lass ihn so kurz wie nur möglich.
    Dein Konstruktor-Beispiel wäre für meinen Geschmack bereits zu komplex.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Einen Lambda-Ausdruck selbst kann man nicht debuggen.


    Das wusste ich noch nicht mal, kam noch nie dazu es auszuprobieren. Dann werde ich eben Lambda-Expressions so einsetzten, dass in erster Linie die Leserlichkeit erhalten bleibt. Ich dachte vom Gefühl her auch, dass das VectorProduct Beispiel ein etwas langer Einzeiler wäre.

    @Pascalony Ich hab ein Projekt übernommen, da waren 50-Zeilen-lange Lambda-Ausdrücke, und da da nix ging, hab ich den Inhalt in eine separate Prozedur ausgelagert und im Ausdruck selbst einfach die Prozedur aufgerufen.
    Da war alles in Ordnung.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Bluespide schrieb:

    Deine Beispiele sind allerdings kein reines Lambda


    Jo, ich weiß. Lamda wiederum könnte man dann noch in expression lambda und statement lambda unterteilen etc. Dachte, dass in dem Fall klar ist was gemeint ist, weil ich ja dennoch die Funktionen als Member haben möchte. Daher kann es sich ja nur um Expression-bodies members handeln.