Czy w C # można zdefiniować alias do krotki wartości z nazwami?


92

Wiem, że można zdefiniować aliasy w C # za pomocą słowa kluczowego using .

na przykład

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

Czy jest jednak możliwe zdefiniowanie jednego przy użyciu nowej składni dla krotek wartości?

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

Wydaje się, że ta składnia nie działa. Czy powinno?


1
Nie znam odpowiedzi, ale wygląda to tak samo, jak „czy mogę użyć zmiennej na poziomie modułu do zdefiniowania zmiennej?”
Mario Vernari

jeśli się nie kompiluje, oznacza to, że nie powinno działać
Selman Genç

4
Nie znam odpowiedzi, ale wygląda na to, że lepiej jest stworzyć klasę lub strukturę do tego celu. Krotki są dobre, ale nie nadużywaj ich.
Yeldar Kurmangaliyev

4
Ciekawy komentarz @YeldarKurmangaliyev. Powodem użycia tego jest to, że nie trzeba implementować wszystkich porównywalnych interfejsów, aby używać ich jako prostego klucza dla obiektu. Tak, to ja jestem leniwy, ale jednocześnie w pełni wykorzystuję funkcje języka.
Nick Randell

3
@NickRandell - przez większość czasu piszesz oprogramowanie dla ludzi (innych programistów) - oni będą czytać Twój kod. Posiadanie klasy i właściwości z opisowymi nazwami - jest bardziej przyjaznym / skutecznym podejściem. Większość czasu, który programiści spędzają na czytaniu kodu (własnego i innych) opisowych nazw i struktur danych, pozwoli zaoszczędzić ich czas
Fabio

Odpowiedzi:



1

usingjest zdefiniowany jako: ( MSDN ).using identifier = namespace-or-type-name;

(Guid venueId, string contentId, string answer) nie jest ani przestrzenią nazw, ani (w pełni kwalifikowaną) nazwą typu.

Ale ja głównie zgaduję. Nie wiedziałem nawet, że C # 7.0 istnieje aż do teraz.


1
To jest specyfikacja C # 1.1, jak to dowodzi czegoś o C # 7.0?
svick

1
Rozumiem, skąd wzięło się założenie, że to zadziała. Mogłem zrobić to samo, ale to nie w porządku. Użycie nie jest aliasem dla typu. Ale dla nazwy typu lub nazwy przestrzeni nazw. A funkcje związane z kompilatorem to ostatnia rzecz, którą można zmienić, bez przerywania istniejącego kodu. Więc prawdopodobnie nie mogą go rozszerzyć. Ale wszystko to jest prawdopodobnie wyjaśnione bardziej szczegółowo w powyższym poście Davida Arno. Głosowałem za tym, ponieważ lepiej na to odpowiada. Sprawiając, że twoje pytanie nie jest problemem ...
Christopher

2
@svick Pytanie brzmiało, czy ta konkretna składnia „powinna być” dozwolona. To poprawnie odpowiada „nie, programiści C # nie są zobowiązani do zezwalania na tę konkretną składnię, ponieważ podobne składnie nie były dozwolone od pierwszych wersji C #”. Szersze pytanie dotyczy tego, czy powinno być dozwolone jakiekolwiek wyrażenie typu using.
IllidanS4 obsługuje Monikę

1
@ IllidanS4 Jeśli tak mówi ta odpowiedź, to jest to naprawdę niejasne. Nie wspomina o tym, że połączona specyfikacja jest stara lub jakakolwiek część przedstawionego argumentu.
svick

5
@Christopher Jeśli uważam, że odpowiedź jest zła, skomentuję ją. Nie ma dla mnie znaczenia, jak szybko została napisana odpowiedź ani jakie zawiera zastrzeżenia. A jeśli uważasz, że Twoja odpowiedź nie dodaje żadnej wartości, poczuj opłatę, aby ją usunąć. Wydaje mi się również, że ludzie przychodzą do SO, aby znaleźć świadome odpowiedzi, więc może powinieneś trochę pomyśleć, zanim napiszesz niedoinformowaną odpowiedź?
svick
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.