使用新的 c # 7 tuple 语法,是否可以指定一个带有 tuple 作为参数的 lambda,并在 lambda 中使用未打包的值?
例如:
var list = new List<(int,int)>();
在 lambda 中使用元组的正常方法:
list.Select(value => value.Item1*2 + value.Item2/2);
我期望一些新的糖,以避免 .Item1
.Item2
,如:
list.Select((x,y) => x*2 + y/2);
最后一行不起作用,因为它被视为 lambda 的两个参数。我不确定是否真的有办法做到这一点。
编辑:
我在 lambda 定义中尝试了双括号,但是没有成功: ((x,y)) => ...
,也许这样做很愚蠢,但是双括号在这里确实有效:
list.Add((1,2));
另外,我的问题并不完全是关于避免使用丑陋的默认名称 .Item .Item2
,而是关于在 lambda 中实际解压缩一个元组(也许还有为什么没有实现或不可能实现)。如果您来这里是为了获得默认名称的解决方案,请阅读 谢尔盖 · 别列佐夫斯基的回答。
编辑2:
只是想到一个更通用的用例: 是否有可能(或者为什么没有)“解构”传递给方法的元组?像这样:
void Foo((int,int)(x,y)) { x+y; }
而不是这样:
void Foo((int x,int y) value) { value.x+value.y }