C# 从valuetuple创建子元组
C#7 ValueTuple是否有类似于Python切片的功能?C#中值元组的语法类似于Python,但我找不到从元组中获取子元组的优雅方法 在Python 3中:C# 从valuetuple创建子元组,c#,python,c#-7.0,valuetuple,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) 在C#7中: 不,C#中没有这样的东西。由于C#的静态类型特性,这样的特性无法处理切片点的任意表达式 我认为最接近的方法是创建一组扩展方法,这些扩展方法的名称中嵌入了切片点。例如: public static (T1,
tuple = (1,2,3)
subtuple = t[:2] #subtuple is (1, 2)
在C#7中:
不,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();
publicstatic(T1,T2)Take2(这个(T1,T2,T3)元组)=>
(tuple.Item1,tuple.Item2);
变量元组=(1,2,3);
var subtuple=tuple.Take2();
请注意,如果元组成员有名称,这将去除它们。AFAIK,这里的答案很简单:“否”在Python中,它就像一个数组,但这里有一个类似objectcheck的东西,如果这对您有帮助:@silkfire很难进行反射,因为其目的通常是尊重元素的逻辑名称,这些名称对于任何反射API都不可用;它必须是一种语言特征。此外,在大型元组中对最终“everything Other”值的扩展/滚动将很难作为反射处理。C#是静态类型的,因此,由于这个原因,单独使用python语法是不可能的,因为在您的示例中,
subtuple
的类型无法在编译时确定(它可以是ValueTuple或ValueTuple等)。
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();