Подтвердить что ты не робот

В С# вы можете определить псевдоним для кортежа значений с именами?

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

например.

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

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

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

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

4b9b3361

Ответ 1

Это было запрошено и записано в репозитории Roslyn на Github. Однако:

Поэтому я бы предположил, что это вряд ли произойдет.

Ответ 2

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

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

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

Ответ 3

Я просто искал способ псевдонимов кортежа, и вы действительно дали мне ответ. Однако я считаю, что он не может работать с именами. Имена не являются частью этого типа. Попробуйте это.

void foo((int, int) arg)
{
//do whatever
}

теперь попробуйте передать эти кортежи,

(int, int) test1 = (1, 1);
(int x, int y) test2 = (1, 1);
(int bar, int baz) test3 = (1, 1);

Функция принимает все из них как аргумент, потому что они одного типа. Тип определяется только структурой кортежа, а не именами его членов. Это позволяет использовать гибкость, которая невозможна для структуры или класса. Если вы хотите "псевдоним" типа, который включает имена членов как часть типа, почему бы просто не использовать структуру или класс? Если вы хотите поддерживать совместимость с другими кортежами одной и той же структуры, имена не могут быть частью типа.