从值元组创建子元组

Creating subtuple from a valuetuple

C# 7 ValueTuple 是否有类似于 Python 切片的功能? C# 中值元组的语法类似于 Python 但我找不到从元组获取子元组的优雅方法。

在Python 3:

 tuple = (1,2,3)
 subtuple = t[:2]   #subtuple is (1, 2)

在 C# 7 中:

 var tuple = (1,2,3)   //Very similar to Python!
 var subtuple = (tuple.Item1, tuple.Item2)  //Not very elegant, especially for bigger tuples

不,C# 中没有这样的东西。由于 C# 的 statically-typed 性质,类似的功能不能用于切片点的任意表达式。

我认为最接近的方法是创建一堆名称中嵌入切片点的扩展方法。例如:

public static (T1, T2) Take2<T1, T2, T3>(this (T1, T2, T3) tuple) =>
    (tuple.Item1, tuple.Item2);

var tuple = (1,2,3);
var subtuple = tuple.Take2();

请注意,如果元组成员有名称,这将删除它们。