Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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# 如何使用Tuple.Create()方法创建这样的元组_C#_Tuples - Fatal编程技术网

C# 如何使用Tuple.Create()方法创建这样的元组

C# 如何使用Tuple.Create()方法创建这样的元组,c#,tuples,C#,Tuples,如果我写这样的代码: var a = Tuple.Create(1,2,3); var b = Tuple.Create(1,2,3,4,5,6,7,a); 它实际上创建了一个元组,其类型为: Tuple<int,int,int,int,int,int,int,Tuple<Tuple<int,int,int>>> 元组 我如何使用Tuple.Create()方法创建一个元组,如: Tuple<int,int,int,int,int,int,int,

如果我写这样的代码:

var a = Tuple.Create(1,2,3);
var b = Tuple.Create(1,2,3,4,5,6,7,a);
它实际上创建了一个元组,其类型为:

Tuple<int,int,int,int,int,int,int,Tuple<Tuple<int,int,int>>>
元组
我如何使用Tuple.Create()方法创建一个元组,如:

Tuple<int,int,int,int,int,int,int,Tuple<int,int,int>>
元组

你不能。根据MSDN:

NET Framework直接支持具有1到7个元素的元组。此外,通过在元组对象的Rest属性中嵌套元组对象,可以创建八个或更多元素的元组

正因为如此,您得到了
Tuple
,其中
Tuple
作为第8个元素。

如上所述,
Tuple.Create
方法的返回值是
System.Tuple
,其中第8个参数被包装到新的Tuple中。如果您将tuple作为最后一个参数传递,那么这个tuple将被包装到tuple中,您将得到现在的
tuple

这种创建方法的原理非常简单:

static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>> Create<T1, T2, T3, T4, T5, T6, T7, T8>(
   T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, T8 item8)
{
    return new Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>>(
        item1, item2, item3, item4, item5, item6, item7, new Tuple<T8>(item8));
}

为什么您更喜欢这样的元组而不是具有命名属性的数据对象?
static Tuple<T1, T2, T3, T4, T5, T6, T7, T8> CreateTuple<T1, T2, T3, T4, T5, T6, T7, T8>(
    T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, T8 item8)
    where T8: ITuple
{
    return new Tuple<T1, T2, T3, T4, T5, T6, T7, T8>(
        item1, item2, item3, item4, item5, item6, item7, item8);
}
var a = Tuple.Create(1,2,3);
var b = CreateTuple(1,2,3,4,5,6,7,a);
// Tuple<int,int,int,int,int,int,int,Tuple<int,int,int>>
var point = (x: 1, y: 2, z: 3);
var rocket = (id: 1, speed: 100, location: point);

// rocket.location.y