У C # ви можете визначити псевдонім значення кортежу з іменами?


92

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

напр

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

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

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

Здається, цей синтаксис не працює. Чи слід?


1
Я не знаю відповіді, але це схоже на те саме, що "чи можу я використовувати var на рівні модуля для визначення змінної?"
Маріо Вернарі,

якщо він не компілюється, це означає, що він не повинен працювати
Selman Genç

4
Я не знаю відповіді, але, схоже, для цих цілей краще створити клас або структуру. Кортежі хороші, але, будь ласка, не зловживайте цим.
Єлдар Курмангалієв

4
Цікавий коментар @YeldarKurmangaliyev. Причиною використання цього є відсутність необхідності реалізовувати всі порівнянні інтерфейси, щоб використовувати їх як простий ключ для об'єкта. Так, це мені лінь, але я також використовую мовні можливості в повній мірі.
Нік Ренделл,

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

Відповіді:



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 Якщо про це говорить ця відповідь, то насправді незрозуміло. У ньому не згадується, що пов'язана специфікація стара або будь-яка частина аргументу, який ви навели.
свик

5
@Christopher Якщо я вважаю відповідь поганою, я її прокоментую. Для мене не має значення, наскільки швидко була написана відповідь чи які застереження вона має. І якщо ви вважаєте, що ваша відповідь не додає ніякої цінності, платно видаліть її. Крім того, я думаю, що люди звертаються до ТО, щоб знайти поінформовані відповіді, тож, можливо, вам слід трохи подумати, перш ніж писати неінформовану відповідь?
свик
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.