C # - Syntaktischer Zucker für out-Parameter?

8

Lassen Sie uns für einen Moment sagen, dass C # mehrere Rückgabewerte im reinsten Sinne zulässt, wo wir erwarten würden, etwas wie:

zu sehen %Vor%

verdichtet zu:

%Vor%

In diesem Fall muss ich die Rückgabewerte der Methode erst verstehen, wenn ich den Methodenaufruf tatsächlich mache. Vielleicht verlasse ich mich auf Intellisense, um mir mitzuteilen, mit welchen Rückgabewerten ich es zu tun habe, oder vielleicht suche ich nach einer Methode, die das zurückgibt, was ich von einer Klasse, die mir nicht vertraut ist, zurückgibt.

Ähnlich haben wir derzeit in C # so etwas:

%Vor%

wobei das Argument für GetParticipants ein out Zeichenfolgenparameter ist. Dies ist jedoch etwas anders als oben, weil es bedeutet, dass ich Code, der eine Variable erzeugt, die das Ergebnis des out-Parameters enthält, vorwegnehmen oder zumindest zurückschreiben und schreiben muss. Dies ist ein wenig kontraintuitiv.

Meine Frage ist, gibt es irgendeinen syntaktischen Zucker im aktuellen C #, der es einem Entwickler ermöglicht, diese Deklaration in derselben Zeile wie der Methodenaufruf zu machen? Ich denke, es würde die Entwicklung ein (kleines) bisschen flüssiger machen und auch den Code lesbarer machen, wenn ich etwas tun würde wie:

%Vor%

zeigt an, dass der Empfänger an Ort und Stelle deklariert und zugewiesen wurde.

    
JoshJordan 14.04.2009, 16:54
quelle

10 Antworten

9

Nein, dazu gibt es zur Zeit keinen syntaktischen Zucker. Ich habe von keiner Absicht gehört, irgendwelche einzuführen.

Ich kann nicht sagen, dass ich out -Parameter oft genug benutze, damit es für mich wirklich von Bedeutung ist (es gibt andere Features, auf die ich lieber das C # -Team verwenden würde), aber ich stimme zu, dass es ein bisschen nervig ist .

    
Jon Skeet 14.04.2009, 16:57
quelle
5

.NET 4 wird ein Tuple-Konzept hinzufügen, das sich damit beschäftigt. Leider wird die C # -Sprache keine Sprachunterstützung für "Destructuring Bind" bieten.

    
wekempf 14.04.2009 17:08
quelle
4

Ich persönlich mag die Unannehmlichkeiten, die bei der Verwendung von Parametern auftreten. Es hilft mir, darüber nachzudenken, ob meine Methode wirklich das tut, was sie sein sollte, oder ob ich zu viel Funktionalität hineingequetscht habe. Das heißt, vielleicht dynamisches Tippen in C # 4.0 / .Net 4 wird einige Ihrer Bedenken ansprechen.

%Vor%

wo

%Vor%     
tvanfosson 14.04.2009 17:16
quelle
2

Sie können auch eine Tuple<T,U> oder etwas Ähnliches zurückgeben. Da Sie jedoch zwei Strings zurückgeben möchten, kann es verwirrend sein.

Ich benutze die Tuples-Strukturen der BclExtras-Bibliothek , die sehr praktisch ist (fand sie auf SO, danke JaredPar! ).

    
Jabe 14.04.2009 17:10
quelle
2

Ich glaube nicht, dass eine solche Funktionalität existiert, aber wenn sie in ähnlicher Weise wie Arrays in Perl implementiert würde, die tatsächlich nützlich sein könnten.

In Perl Sie können ein Array einer Liste von Variablen in Klammern zuweisen. So können Sie dies zum Beispiel tun

%Vor%     
Michał Piaskowski 14.04.2009 17:24
quelle
2

Wo dies mich am meisten stört: Da es keine Überladung von (sagen wir) DateTime.TryParse gibt, die keinen Parameter out benötigt, können Sie nicht

schreiben %Vor%

ohne d zu deklarieren. Ich weiß nicht, ob das ein Problem mit out Parametern ist oder nur, wie die TryParse Methode implementiert ist, aber es ist nervig.

    
Robert Rossney 14.04.2009 18:18
quelle
1

Dieser syntaktische Zucker ist jetzt in der Roslyn-Vorschau verfügbar, wie hier zu sehen ist (Deklarationsausdrücke genannt) .

%Vor%     
Craig 16.04.2014 18:21
quelle
0

Im besten Fall müssten Sie var anstelle eines expliziten Typs verwenden, es sei denn, Sie möchten alle Mehrfach-Rückgabewerte auf denselben Typ beschränken (was wahrscheinlich nicht praktikabel ist). Sie würden auch den Umfang der Variablen begrenzen; Derzeit können Sie eine Variable mit einem höheren Gültigkeitsbereich deklarieren und sie in einem out-Parameter initialisieren. Bei diesem Ansatz würde die Variable im selben Block wie ihre Zuweisung den Gültigkeitsbereich verlassen. Offensichtlich ist dies in einigen Fällen brauchbar, aber ich möchte dies nicht als allgemeine Regel durchsetzen. Natürlich könnten Sie die Option " out " beibehalten, aber die Wahrscheinlichkeit ist groß, dass die Leute für den einen oder anderen Ansatz kodieren.

    
Adam Robinson 14.04.2009 16:55
quelle
-1

Ich denke, das ist nicht das, was du willst. Sie haben vielleicht ein Stück Code entdeckt, wo Sie hätten mochte das. Aber Variablen wie aus dem Nichts Sie wurden in der Parameterliste eingeführt ein persönlicher Albtraum (für mich :))

Mehrere Rückgabewerte haben schwerwiegende Nachteile von dem Punkt Portabilität / Wartbarkeit. Wenn Sie eine Funktion erstellen, die zwei Zeichenfolgen zurückgibt und Sie möchten jetzt, dass es drei zurückgibt, müssen Sie den gesamten Code ändern das verwendet diese Funktion. Ein zurückgegebener Datensatztyp spielt jedoch normalerweise in solchen üblichen Szenarien gut.

Sie können die Pandora Box öffnen; -)

Für Zeilenkomprimierung:

%Vor%

Linien können beliebige Länge haben, so dass Sie einige gemeinsame Sachen in einen einpacken können. Versuche einfach mit den Semikolons zu leben.

    
AndreasT 14.04.2009 17:07
quelle
-1

Probieren Sie den folgenden Code

aus %Vor%     
Dustin Getz 14.04.2009 17:04
quelle

Tags und Links