问题描述
(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模板)。