将List <int?>转换为List <int> </int> </int?>的任何简单方法

时间:2012-12-06 06:29:48

标签: c# .net

目前我使用List<int> ints = tuple.Item2.Select(s => s.Value).ToList(),但是当tuple.Item2有1000个项目时,这看起来效率很低。有没有更好的方法实现这一目标除了使用for循环。

2 个答案:

答案 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,则此方法将抛出异常。您必须考虑捕获异常。