В С# 7.0 введены кортежи значений, а также поддержка некоторых языков. Они также добавили поддержку одиночных и нулевых кортежей; однако я не мог найти ни одного сценария, когда они могут быть полезны.
По ValueTuple.Create
перегрузки я могу создавать любые ValueTuple.Create
кортежей, но синтаксис С# 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<int> t1 = (1);
(1,23): error CS0029: Cannot implicitly convert type 'int' to 'ValueTuple<int>'
> ValueTuple<int> t1 = new ValueTuple<int>(1);
> t1
[(1)]
Я думаю, что я нашел поток, где была запрошена эта функция, но ни один из примеров кода не действителен на С# сейчас и не мог найти ссылок на запланированные функции С# 8.0, даже не на шаблоны рекурсивного кортежа.
В упомянутой теме указаны языки функционального программирования нитей запроса. Может быть, какой-либо функциональный язык, который использует их сейчас? Я не эксперт F #, но его ссылка на tuple не упоминает использование одиночных и нулевых кортежей.
Поэтому вопросы TL; DR:
- Являются ли одиночные и нулевые кортежи элементов используемыми на любом (возможно, функциональном) языке.NET? Я имею в виду не
Tuple.Create
или конструкторами, а поддержкой родного языка. - Планируется ли их использовать в будущей версии С#?
- Или они там для "на всякий случай", для будущей совместимости?