从值元组创建子元组
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();
请注意,如果元组成员有名称,这将删除它们。
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();
请注意,如果元组成员有名称,这将删除它们。