【发布时间】:2018-05-28 16:17:54
【问题描述】:
在 JavaScript ES6 中,您可以像这样解构数组:
const [a,b,...rest] = someArray;
其中a 是数组中的第一个元素,b 是第二个元素,rest 是一个包含其余元素的数组。
我知道在 C#7 中您可以在赋值期间解构元组,但找不到与像这样解构数组/枚举相关的任何内容:
var (a,b) = someTuple;
我有一个IEnumerable,我需要第一个和第二个元素作为变量,我需要其余元素作为另一个 IEnumerable。我有一个解决方案,但觉得解构看起来会更干净。
【问题讨论】:
-
将其余部分作为
IEnumerable<T>是很棘手的,因为为了获得第一个和第二个元素,您需要开始迭代。您可以将生成的IEnumerator<T>包装在IEnumerable<T>中,但您只能对其进行一次迭代。如果您不介意将其复制到List<T>,那会起作用,但效率很低... -
(用数组来做这一切会简单得多。)
-
你可以使用Succinc<T> library(免责声明:我写的)。它提供了
IEnumerable<T>的解构(没有@JonSkeet 提到的重新枚举问题)。你的代码就是var (a, (b, rest)) = someArray; -
@DavidArno 我认为您应该将此作为答案发布,因为语法与 OP 想要的非常接近。如果可以提取此功能并发布它的代码,那就更好了。
-
@Evk,好的,我已将其添加为答案。
标签: c# destructuring c#-7.0