我正在尝试使用元组的TRest部分,以便我可以说将14个字符串添加到元组列表中。
List<Tuple<string, string, string, string, string, string, string, Tuple<string, string, string, string, string, string, string>>> list = new List<Tuple<string, string, string, string, string, string, string, Tuple<string, string, string, string, string, string, string>>>();
创建第二个元组列表(list2),我将7个字符串添加到:
Tuple<string, string, string, string, string, string, string> list2 = Tuple.Create(test8, test9, test10, test11, test12, test13, test14);
然后将所有字符串添加到第一个列表中:
list.Add(Tuple.Create(test1, test2, test3, test4, test5, test6, test7, list2));
我遇到了一个重载错误,在我做一些根本不正确的事情之前我没有尝试过使用它吗?
答案 0 :(得分:5)
要在元组上使用TRest,你必须包含另一个元组,例如16元组的int将是:
Tuple<int, int, int, int, int, int, int,
Tuple<int, int, int, int, int, int, int,
Tuple<int,int>>> t16;
然后,访问元素1-7:
var x1 = t16.Item1;
...
var x7 = t16.Item7;
然后,访问元素8-14:
var x8 = t16.Rest.Item1;
...
var x14 = t16.Rest.Item7;
然后,访问元素15,16:
var x15 = t16.Rest.Rest.Item1;
var x16 = t16.Rest.Rest.Item2;
等等。我有一篇博文,如果有兴趣的话,可以潜入here ......
<强>更新强>
您的具体错误是因为具有8个类型参数的Tuple.Create()
旨在创建八元组,而不是九元组及更高版本。因此:
Tuple.Create<T1, T2, T3, T4, T5, T6, T7, T8>(...)
实际创建一个
Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>>
因为你传递了
Tuple<string, string, string, string, string, string, string>
作为T8,它将Septuple包装在第8个元素中,这不是你所期望的。
这就是为什么抱怨类型不匹配的原因,如果你在错误中注意到它有Tuple<Tuple<string, string, string, string, string, string, string>>
作为T8,这是一个包含在元组中的七元组。
因此,如果你想要隐式输入,或者手工构建它,你或者需要为Tuple编写一些9元组及以上的扩展:
list.Add(new Tuple<string, string, string, string, string, string, string,
Tuple<string, string, string, string, string, string, string>>(
test1, test2, test3, test4, test5, test6, test7, list2));
大元组可能令人困惑的众多原因中的一个。