Для чего нужны кортежи с одним или нулевым элементом?C#

Место общения программистов C#
Ответить
Anonymous
 Для чего нужны кортежи с одним или нулевым элементом?

Сообщение Anonymous »

В C# 7.0 представлены кортежи значений, а также некоторая их поддержка на уровне языка. Они также добавили поддержку кортежей с одним и нулевым элементом; однако мне не удалось найти ни одного сценария, в котором они могли бы быть полезны.

С помощью перегрузок ValueTuple.Create я могу создавать кортежи любого типа, но синтаксис C# 7.0 допускает как минимум два элемента:

Код: Выделить всё

Microsoft (R) Roslyn C# Compiler version 2.8.3.62923
Loading context from 'CSharpInteractive.rsp'.
Type "#help" for more information.
> ValueTuple.Create()
[()]
> ValueTuple.Create(1)
[(1)]
> ValueTuple.Create(1, "x")
[(1, x)]
По синтаксису кортежа:

Код: Выделить всё

> var t2 = (1, 2);
> var t1 = (1); // t1 is now int (of course)
> ValueTuple t1 = (1);
(1,23): error CS0029: Cannot implicitly convert type 'int' to 'ValueTuple'
> ValueTuple t1 = new ValueTuple(1);
> t1
[(1)]
Я думаю, что нашел ветку, в которой была запрошена эта функция, но ни один из примеров кода сейчас недействителен для C#, и я не смог найти никаких ссылок в запланированных функциях C# 8.0, даже в шаблонах рекурсивных кортежей.

В ветке запроса упоминаются функциональные языки программирования. Может быть, существует какой-нибудь функциональный язык, который их сейчас использует? Я не эксперт по F#, но в справочнике по кортежам не упоминается использование кортежей с одним и нулевым элементом.

Итак, вопросы TL;DR:
  • Используются ли кортежи с одним и нулевым элементом в каком-либо (возможно, функциональном) языке .NET? Я имею в виду не Tuple.Create или конструкторы, а поддержку родного языка.
  • Планируется ли их использовать в будущей версии C#?
  • Или они существуют «на всякий случай», для будущей совместимости?


Подробнее здесь: https://stackoverflow.com/questions/517 ... s-good-for
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»