Вам необходимо явно преобразовать testList
(List<Test>
) в tupleList
(List<(int, int)>
)
tupleList = testList.Select(t => (t.A, t.B)).ToList();
Объяснение:
Вы используете код, как если быDeconstruct
позволяет преобразовать класс, реализующий Deconstruct
, в кортеж (ValueTuple
), но это не то, что Deconstruct
дозировка.
Из документации Деконструкция кортежей и других типов :
Начиная с C # 7.0, вы можете извлекать несколько элементов из кортежа или извлекать несколько полей, свойств и вычисленных значений из объекта в одной операции деконструкции.Когда вы деконструируете кортеж, вы присваиваете его элементам отдельные переменные .Когда вы деконструируете объект, вы присваиваете выбранные значения отдельным переменным .
Деконструкция возвращает несколько элементов отдельным переменным , а не кортежу (ValueTuple
).
Попытка преобразовать List<Test>
в List<(int, int)>
следующим образом:
var testList = new List<Test>();
var tupleList = new List<(int, int)>();
tupleList = testList;
не может работать, потому что вы не можете преобразовать List<Test>
в List<(int, int)>
.Будет сгенерирована ошибка компилятора:
Не удалось неявно преобразовать тип 'System.Collections.Generic.List' в 'System.Collections.Generic.List <(int, int)>'
Попытка привести каждый элемент Test
к (int, int)
следующим образом:
tupleList = testList.Cast<(int, int)>().ToList();
не может работать, потому что вы не можете привести Test
к (int, int)
.Будет сгенерирована ошибка времени выполнения:
System.InvalidCastException: 'Указанное приведение недопустимо.'
Попытка преобразовать один элемент Test
в(int, int)
вот так:
(int, int) tuple = test;
не может работать, потому что вы не можете преобразовать Test
в (int, int)
.Он генерирует ошибку компилятора:
Не удается неявно преобразовать тип 'Deconstruct.Test' в '(int, int)'