Чтобы использовать 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;
И так далее.У меня есть запись в блоге, которая немного углубляется в них здесь , если это интересно ...
Обновление:
Ваша конкретная ошибка в том, чтоTuple.Create()
с 8 типами параметров предназначен для создания Octuples, а не Nine-Tuples и не только.Таким образом:
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, который является семеркой, завернутой вкортеж.
Так что вам нужно либо написать несколько расширений в кортеж для девяти-кортежа и выше, если вы хотите неявную типизацию, либо собрать его вручную:
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));
Просто одно измного причин, почему большие кортежи могут сбивать с толку.