目前我使用List<int> ints = tuple.Item2.Select(s => s.Value).ToList()
,但是当tuple.Item2有1000个项目时,这看起来效率很低。有没有更好的方法实现这一目标除了使用for循环。
答案 0 :(得分:7)
在一个List<T1>
中转换每个元素并将结果存储在另一个List<T2>
中的内置方法是List<T1>.ConvertAll
。
List<int> ints = tuple.Item2.ConvertAll(s => s.Value);
与.Select(...).ToList()
或.Cast(...).ToList()
不同,此方法提前知道列表大小,并防止.ToList()
无法避免的不必要的重新分配。
为此,tuple.Item2
必须真正为List<int?>
。它不是扩展方法,它不能在通用IEnumerable<int?>
接口上工作。
答案 1 :(得分:2)
您只需使用Linq Cast<>
即可实现此目标。
List<int> ints = tuple.Item2.Cast<int>();
但是如果一个元素无法转换为类型TResult,则此方法将抛出异常。您必须考虑捕获异常。