C# 中的元组展开类似于 Python
Tuple unrolling in C# similar to Python
在Python中我们可以使用类似的语法展开一个元组:
a, b = (1, 2)
C#中有类似的结构吗?或者访问像这样的元素:
Tuple<int, int> t = Tuple.Create(1, 2);
Console.Write(t.Item1);
唯一可行的方法?
C# 语言不直接支持元组解构(有时称为 "explosion"),即将其元素分布在多个变量上。
您可以编写自己的扩展方法:
static void ExplodeInto<TA,TB>(this Tuple<TA,TB> tuple, out TA a, out TB b)
{
a = tuple.Item1;
b = tuple.Item2;
}
var tuple = Tuple.Create(1, 2);
int a, b;
tuple.ExplodeInto(out a, out b);
以上示例仅适用于成对(即包含两个项目的元组)。您需要为每个 Tuple<>
size/type.
编写一个这样的扩展方法
在即将推出的 C# 语言版本中,您可能可以在表达式中声明变量。这可能会让您将上面的最后两行代码组合成 tuple.ExplodeInto(out int a, out int b);
.
Correction: Declaration expressions have apparently been dropped from the planned features for C# 6, or at least restricted; as a result, what I suggested above would no longer work.
在Python中我们可以使用类似的语法展开一个元组:
a, b = (1, 2)
C#中有类似的结构吗?或者访问像这样的元素:
Tuple<int, int> t = Tuple.Create(1, 2);
Console.Write(t.Item1);
唯一可行的方法?
C# 语言不直接支持元组解构(有时称为 "explosion"),即将其元素分布在多个变量上。
您可以编写自己的扩展方法:
static void ExplodeInto<TA,TB>(this Tuple<TA,TB> tuple, out TA a, out TB b)
{
a = tuple.Item1;
b = tuple.Item2;
}
var tuple = Tuple.Create(1, 2);
int a, b;
tuple.ExplodeInto(out a, out b);
以上示例仅适用于成对(即包含两个项目的元组)。您需要为每个 Tuple<>
size/type.
在即将推出的 C# 语言版本中,您可能可以在表达式中声明变量。这可能会让您将上面的最后两行代码组合成 tuple.ExplodeInto(out int a, out int b);
.
Correction: Declaration expressions have apparently been dropped from the planned features for C# 6, or at least restricted; as a result, what I suggested above would no longer work.