Können Sie in C # einen Alias ​​für ein Wertetupel mit Namen definieren?


89

Ich weiß, dass es möglich ist, Aliase in C # mit dem Schlüsselwort using zu definieren .

z.B

using ResponseKey = System.ValueTuple<System.Guid, string, string>;

Ist es jedoch möglich, eine mit der neuen Syntax für Wertetupel zu definieren?

using ResponseKey = (Guid venueId, string contentId, string answer);

Diese Syntax scheint nicht zu funktionieren. Sollte es?


1
Ich kenne die Antwort nicht, aber sie sieht genauso aus wie "Darf ich var auf Modulebene verwenden, um eine Variable zu definieren?"
Mario Vernari

Wenn es nicht kompiliert wird, bedeutet es, dass es nicht funktionieren sollte
Selman Genç

4
Ich kenne die Antwort nicht, aber es sieht so aus, als wäre es besser, eine Klasse oder Struktur für diese Zwecke zu erstellen. Tupel sind gut, aber bitte nicht überbeanspruchen.
Yeldar Kurmangaliyev

4
Interessanter Kommentar @YeldarKurmangaliyev. Der Grund dafür ist, dass nicht alle vergleichbaren Schnittstellen implementiert werden müssen, um als einfacher Schlüssel für ein Objekt verwendet zu werden. Ja, ich bin faul, aber ich nutze auch die Sprachfunktionen in vollen Zügen.
Nick Randell

3
@NickRandell - die meiste Zeit, in der Sie Software für die Leute (andere Entwickler) schreiben, lesen sie Ihren Code. Eine Klasse und Eigenschaften mit beschreibenden Namen zu haben - ist ein freundlicherer / effektiverer Ansatz. Die meiste Zeit, die Programmierer damit verbringen, Code (eigene und andere) beschreibende Namen und Datenstrukturen zu lesen, sparen ihre Zeit
Fabio

Antworten:



2

usingist definiert als: ( MSDN ).using identifier = namespace-or-type-name;

(Guid venueId, string contentId, string answer) ist weder ein Namespace noch ein (vollständig qualifizierter) Typname.

Aber ich rate meistens. Wusste nicht einmal, dass C # 7.0 bis jetzt existiert.


Das ist die Spezifikation für C # 1.1. Wie beweist das etwas über C # 7.0?
Svick

1
Ich verstehe, wie die Annahme kommt, dass es funktionieren würde. Hätte das gleiche machen können Aber es ist nicht richtig. Die Verwendung ist kein Alias ​​für einen Typ. Aber für einen Typnamen oder einen Namespace-Namen. Und Compiler-bezogene Funktionen sind eines der letzten Dinge, die Sie ändern können, ohne vorhandenen Code zu beschädigen. Sie können es also wahrscheinlich nicht erweitern. Aber all das wird wahrscheinlich in David Arnos Beitrag oben viel ausführlicher erklärt. Was ich positiv bewertet habe, weil es besser antwortet. Machen Sie Ihre Frage zu einer Art Nicht-Problem ...
Christopher

1
@svick Die Frage war, ob diese spezifische Syntax "erlaubt" sein sollte. Dies wird korrekt mit "Nein, die C # -Entwickler sind nicht verpflichtet, diese spezifische Syntax zuzulassen, da ähnliche Syntaxen seit den ersten Versionen von C # nicht mehr zulässig sind". Die umfassendere Frage ist, ob ein Typausdruck zulässig sein sollte using.
IllidanS4 will Monica

@ IllidanS4 Wenn das in dieser Antwort steht, dann ist es wirklich unklar. Es wird nicht erwähnt, dass die verknüpfte Spezifikation alt ist oder ein Teil des von Ihnen vorgebrachten Arguments ist.
Svick

4
@Christopher Wenn ich denke, dass eine Antwort schlecht ist, werde ich sie kommentieren. Es ist mir egal, wie schnell die Antwort geschrieben wurde oder welche Haftungsausschlüsse sie hat. Und wenn Sie der Meinung sind, dass Ihre Antwort keinen Mehrwert bringt, müssen Sie sie löschen. Ich denke auch, dass Leute zu SO kommen, um informierte Antworten zu finden. Vielleicht sollten Sie ein bisschen nachdenken, bevor Sie eine nicht informierte Antwort schreiben?
Svick
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.