2

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
4

1 回答 1

4

不,在 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();

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

于 2018-04-10T11:04:55.413 回答