Geige hier .
Mit einer Funktion (string a, string b) F()
können Sie das zurückgegebene Tupel dekonstruieren:
%Vor%
Oder Sie können es einfach zuweisen:
%Vor%
Dekonstruktoren von Klassen verhalten sich wie der erste Fall. Gegeben eine Klasse C
mit Deconstructor(out string a, out string b)
:
%Vor%
Aber der Compiler verwendet den Dekonstruktor nicht, um ihn implizit in ein Tupel umzuwandeln:
%Vor%
Offensichtlich können Sie eine implizite Konvertierung basierend auf dem Dekonstruktor schreiben:
%Vor%
Trotz der visuellen Ähnlichkeit in der Syntax zwischen den Dekonstruktions- und Zuweisungsfällen ist das Zuweisen eines Verweises zu einem Tupel nicht dasselbe wie das Dekonstruieren einer Klasse in Variablen und das anschließende Einfügen in ein neues Tupel. Sie können jedoch (int x, int y)
implizit in (double x, double y)
konvertieren. Wertetupel sind die Art von syntaktischem Zucker, bei der es so funktioniert, wie es aussieht, und die Implementierungsdetails nicht zu beachten sind.
Wenn ich darüber nachdachte, dachte das C # -Team darüber nach, und wenn sie keine "magische" Unterstützung für die implizite Konvertierung hinzufügten, hatten sie einen guten Grund 1 .
Gibt es einen positiven Grund, warum die implizite Konvertierung automatisch eine schlechte Idee wäre?
Oder ist es eines dieser Merkmale, die nicht als wertvoll genug angesehen wurden, um die Kosten zu rechtfertigen?
Hier ist der Code von dieser Geige :
%Vor%
1 Das C # Team ist vielleicht nicht schlauer als alle anderen, aber ich habe nie Geld verloren, indem ich wette, dass sie mindestens so schlau sind wie ich.