从值元组创建子元组

SEN*_*Nya 3 c# python c#-7.0 valuetuple

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

在Python 3中:

 tuple = (1,2,3)
 subtuple = t[:2]   #subtuple is (1, 2)
Run Code Online (Sandbox Code Playgroud)

在 C#7 中:

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

svi*_*ick 5

不,C# 中没有类似的东西。由于 C# 的静态类型特性,此类功能无法使用切片点的任意表达式。

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

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();
Run Code Online (Sandbox Code Playgroud)

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