【发布时间】:2019-01-14 07:39:30
【问题描述】:
C# 7.0 引入了值元组以及对它们的一些语言级别的支持。他们added the support 也是单元素元组和零元素元组;但是,我找不到任何有用的场景。
通过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<int> t1 = (1);
(1,23): error CS0029: Cannot implicitly convert type 'int' to 'ValueTuple<int>'
> ValueTuple<int> t1 = new ValueTuple<int>(1);
> t1
[(1)]
我想我找到了 this feature was requested 所在的线程,但现在没有任何代码示例在 C# 中有效,并且在 planned features of C# 8.0 中也找不到任何引用,甚至在递归元组模式中也找不到。
在请求线程中提到了函数式编程语言。是否有任何功能性语言现在使用它们?我不是 F# 专家,但它的元组 reference 没有提到任何使用单元素和零元素元组。
所以 TL;DR 问题:
- 是否在任何(可能是功能性的).NET 语言中使用了单元素元组和零元素元组?我的意思不是
Tuple.Create或构造函数,而是本地语言支持。 - 是否计划在未来的 C# 版本中使用它们?
- 或者它们是为了“以防万一”,为了未来的兼容性?
【问题讨论】:
-
我猜在 C# 中支持
(1)是由于当前的解析规则而造成的重大变化。 (这就是它评估为1的原因。)