Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从valuetuple创建子元组_C#_Python_C# 7.0_Valuetuple - Fatal编程技术网

C# 从valuetuple创建子元组

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,

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