Использование TRest-компонента Tuple - PullRequest
3 голосов
/ 15 февраля 2012

Я пытаюсь использовать 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));

Я получаю ошибку перегрузки, я не пробовал использовать это раньше, я делаю что-то принципиально неправильное?

1 Ответ

5 голосов
/ 15 февраля 2012

Чтобы использовать 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));

Просто одно измного причин, почему большие кортежи могут сбивать с толку.

...