解构C#元组

时间:2017-11-10 06:55:05

标签: c# f# tuples

是否有可能在C#中解构一个元组,类似于F#?例如,在F#中,我可以这样做:

// in F#
let tupleExample = (1234,"ASDF")
let (x,y) = tupleExample
// x has type int
// y has type string

是否有可能在C#中做类似的事情?例如

// in C#
var tupleExample = Tuple.Create(1234,"ASDF");
var (x,y) = tupleExample;
// Compile Error. Maybe I can do this if I use an external library, e.g. LINQ???

或者我是否必须手动使用Item1,Item2? e.g。

// in C#
var tupleExample = Tuple.Create(1234,"ASDF");
var x = tupleExample.Item1;
var y = tupleExample.Item2;

1 个答案:

答案 0 :(得分:5)

您可以使用Deconstruction但是您应该使用C#7来实现此目的:

  

消费元组的另一种方法是解构它们。解构   声明是将元组(或其他值)拆分为的语法   它的部分并将这些部分分别分配给新的变量

因此以下内容在C#7中有效:

var tupleExample = Tuple.Create(1234, "ASDF");
//Or even simpler in C#7 
var tupleExample = (1234, "ASDF");//Represents a value tuple 
var (x, y) = tupleExample;

Deconstruct方法也可以是扩展方法,如果要解构不属于您的类型,这可能很有用。例如,旧的System.Tuple类可以使用类似这样的扩展方法进行解构:Tuple deconstruction in C# 7):

public static void Deconstruct<T1, T2>(this Tuple<T1, T2> tuple, out T1 item1, out T2 item2)
{
    item1 = tuple.Item1;
    item2 = tuple.Item2;
}