是否有一种方法允许元组列表解构为100%
?
我在以下代码示例中收到以下编译错误:
无法将类型'System.Collections.Generic.List
'隐式转换为'System.Collections.Generic.List <(int,int)>'
List<T>
答案 0 :(得分:7)
您需要将testList
(List<Test>
)显式转换为tupleList
(List<(int, int)>
)
tupleList = testList.Select(t => (t.A, t.B)).ToList();
您正在使用代码,就像Deconstruct
允许您将实现Deconstruct
的类转换为元组(ValueTuple
)一样,但这不是Deconstruct
的用法。 / p>
摘自文档Deconstructing tuples and other types:
从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)'