将统一类型的元组转换为该类型的列表

问题描述

假设我有一个看起来像这样的元组

(string,string,string) myTuple = ("Poop","Stack","Overflow");

是否有一种优雅的方法可以将其转换为看起来像这样的字符串列表?

var myList = new List<string>() { myTuple.Item1,myTuple.Item2,myTuple.Item3 };

我无法ForEach遍历一个元组,或者将其转换为似乎可枚举的...

谢谢!

解决方法

假设您要处理具有相同类型字段的值元组,对于初学者来说,您可以使用简单的反射:

var myList = myTuple.GetType()
    .GetFields()
    .Select(fi => fi.GetValue(myTuple))
    .Cast<string>()
    .ToList();

哪些会有性能上的损失。

如果具有相同大小的元组,则可以引入该方法:

public static List<T> GetFromTuple<T>(ValueTuple<T,T,T> tuple)
{
    return new List<T> {tuple.Item1,tuple.Item2,tuple.Item3}; 
}

还可以使用反射来编写一小段代码,该代码将为所有不同类型的ValueTuple生成方法(或为其创建T4模板)。