C #: Wie definiert man eine Erweiterungsmethode als "mit" in F #?

8

F # hat eine praktische Funktion "mit", zum Beispiel:

%Vor%

F # erstellt das Schlüsselwort "mit", da die Datensatztypen standardmäßig unveränderbar sind.

Nun, ist es möglich, eine ähnliche Erweiterung in C # zu definieren? Scheint, es ist ein bisschen schwierig, wie in C # ich bin mir nicht sicher, wie man eine Zeichenfolge konvertiert

%Vor%

zu einem Delegaten oder Ausdruck?

    
athos 26.07.2011, 15:52
quelle

4 Antworten

4
%Vor%

Oder mit einem Kopierkonstruktor:

%Vor%

Und eine kleine Variation von George's exzellentem Vorschlag, der mehrere Aufgaben zulässt:

%Vor%

Ich würde wahrscheinlich die zweite verwenden, da (1) jede allgemeine Lösung unnötig langsam und verschlungen wird; (2) es hat die am nächsten liegende Syntax zu dem, was Sie wollen (und die Syntax tut, was Sie erwarten); (3) F # copy-and-update Ausdrücke sind ähnlich implementiert.

    
Daniel 26.07.2011, 16:03
quelle
2

Vielleicht in etwa so:

%Vor%     
George Duckett 26.07.2011 16:00
quelle
0

Alternativ zur Lambda-Funktion können Sie Parameter mit Standardwerten verwenden. Das einzige kleine Problem ist, dass Sie einen Standardwert auswählen müssen, dh ändert diesen Parameter nicht (für Referenztypen), aber null sollte eine sichere Wahl sein:

%Vor%

Sie müssen die Methode selbst definieren, aber das ist immer der Fall (es sei denn, Sie werden die Reflexion verwenden, die weniger effizient ist). Ich denke, die Syntax ist auch ziemlich nett. Wenn du es so schön wie in F # machen willst, musst du F #: -)

verwenden     
Tomas Petricek 26.07.2011 16:24
quelle
0

Es gibt keine native Fähigkeit, dies in C # zu tun, kurz vor einer Erweiterungsmethode, aber zu welchen Kosten? a und b sind Referenztypen und Vorschläge, die b basiert ("mit") auf a verursacht unmittelbare Verwirrung darüber, mit wie vielen Objekten wir arbeiten. Gibt es nur einen? Ist b eine Kopie von a ? Zeigt b auf a ?

C # ist nicht F #.

Bitte sehen Sie sich meine vorherige SO Frage von Eric Lippert an:

"Zu meinen Faustregeln beim Schreiben von klarem Code gehören: Alle Nebenwirkungen in Anweisungen einfügen; Ausdrücke ohne Aussage sollten keine Nebenwirkungen haben. "

Fließendere C # / .NET

    
andleer 26.07.2011 16:37
quelle