【发布时间】:2016-11-20 23:20:38
【问题描述】:
在 C# 7 中,apparently 无法解构为只有一项的元组。
ValueTuple<T1> 存在,所以不是因为这个。
并且向后兼容意味着带有一个参数的Deconstruct 方法也必须是合法的:
public void Deconstruct(out int i)
那你为什么不能写:
var (num) = foo;
仅仅是因为没有合理的用例吗?
【问题讨论】:
-
我猜是为了减轻
var num = foo和var (num) = foo之间的混淆,特别是因为括号很少会改变程序的含义(不包括操作顺序)。这样的权衡可能不值得,因为正如您所指出的,解构单个参数并没有有用。 -
我敢打赌,在某些情况下,大括号标识符表达式会产生歧义。
-
一般来说,一元组和一解构会引起各种语法歧义。而且,它们似乎不是很有用。此时,功能规范已将此限制内置到语法中(请参阅 github.com/dotnet/roslyn/blob/master/docs/features/… 和 github.com/dotnet/roslyn/blob/master/docs/features/… )
-
我们在 VB 中使用 optional refs,并希望切换到 C# 并使用元组(因为 C# 不会添加 optional refs,这完全是另一个问题)。但我们不能,因为元组不能只解构第一个返回值。许多其他语言有 3 个点来跳过剩余的值。
标签: c# destructuring c#-7.0