Можно ли в C # определить псевдоним кортежа значений с именами?


92

Я знаю, что в C # можно определять псевдонимы с помощью ключевого слова using .

например

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

Однако можно ли определить его, используя новый синтаксис для кортежей значений?

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

Этот синтаксис не работает. Должен ли он?


1
Я не знаю ответа, но он выглядит примерно так же, как «могу ли я использовать var на уровне модуля для определения переменной?»
Марио Вернари

если он не компилируется, значит, он не должен работать
Селман Генч

4
Я не знаю ответа, но похоже, что для этих целей лучше создать класс или структуру. Кортежи - это хорошо, но, пожалуйста, не злоупотребляйте ими.
Елдар Курмангалиев 03

4
Интересный комментарий @YeldarKurmangaliyev. Причина использования этого состоит в том, чтобы не реализовывать все сопоставимые интерфейсы для использования в качестве простого ключа для объекта. Да, это я ленив, но он также в полной мере использует возможности языка.
Ник Рэнделл

3
@NickRandell - большую часть времени вы пишете программное обеспечение для людей (других разработчиков) - они будут читать ваш код. Наличие класса и свойств с описательными именами - более удобный / эффективный подход. Большую часть времени программисты тратят на чтение кода (собственного и
Фабио

Ответы:


67

Это было запрошено и записано в репозитории Roslyn на Github . Однако там он получил неоднозначный прием, и предлагаемые типы записей с лихвой покрывают это требование.

Проблема была закрыта в репозитории Roslyn, но теперь отслеживается в репозитории языка C # .


1

usingопределяется как: ( MSDN ).using identifier = namespace-or-type-name;

(Guid venueId, string contentId, string answer) не является ни пространством имен, ни (полностью определенным) именем типа.

Но я в основном предполагаю. Даже не знал, что C # 7.0 существует до сих пор.


1
Это спецификация для C # 1.1, как это что-то доказывает о C # 7.0?
svick

1
Я понимаю, откуда такое предположение. Мог бы сделать такой же Но это неправильно. Использование не является псевдонимом для типа. Но для имени типа или имени пространства имен. А функции, связанные с компилятором, - это последнее, что вы можете изменить, не нарушая существующий код. Так что они, вероятно, не могут его расширить. Но все это, вероятно, более подробно объясняется в сообщении Дэвида Арно выше. Я поддержал его, потому что он лучше отвечает. Сделать ваш вопрос
Кристофер

2
@svick Вопрос заключался в том, «должен ли» быть разрешен этот конкретный синтаксис. Это правильно отвечает «нет, разработчики C # не обязаны разрешать этот конкретный синтаксис, потому что аналогичные синтаксисы не разрешались с первых версий C #». Более широкий вопрос заключается в том, должно ли быть разрешено какое-либо выражение типа using.
IllidanS4 поддерживает Монику

1
@ IllidanS4 Если это то, о чем говорится в этом ответе, то это действительно непонятно. В нем не упоминается, что ссылка на спецификацию устарела, и не упоминается какая-либо часть вашего аргумента.
svick

5
@Christopher Если я считаю, что ответ плохой, я прокомментирую его. Для меня не имеет значения, как быстро был написан ответ или какие в нем оговорки. И если вы думаете, что ваш ответ не добавляет никакой ценности, не стесняйтесь его удалить. Кроме того, я думаю, что люди приходят в SO, чтобы найти обоснованные ответы, так что, может быть, вам стоит немного подумать, прежде чем писать неосведомленный ответ?
svick
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.