用List <T>解构

时间:2019-06-23 11:13:07

标签: c# .net-core tuples .net-core-2.1 c#-7.3

是否有一种方法允许元组列表解构为100%

我在以下代码示例中收到以下编译错误:

  

无法将类型'System.Collections.Generic.List '隐式转换为'System.Collections.Generic.List <(int,int)>'

List<T>

1 个答案:

答案 0 :(得分:7)

您需要将testListList<Test>)显式转换为tupleListList<(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)'