关于C#:有什么简单的方法cast List to List

Any easy way to cast List<int?> to List<int>

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


在一个List中转换每个元素并将结果存储到另一个List中的内置方法是List.ConvertAll

1
List<int> ints = tuple.Item2.ConvertAll(s => s.Value);

.Select(...).ToList().Cast(...).ToList()不同,此方法提前知道列表大小,并防止.ToList()无法避免的不必要的重新分配。

为了实现这一点,tuple.Item2必须是一个List。它不是一个扩展方法,它不能在通用的IEnumerable接口上工作。


您可以简单地使用LinqCast<>来实现这一点。

1
List<int> ints = tuple.Item2.Cast<int>();

但是,如果一个元素不能强制转换为tresult类型,则此方法将引发一个异常。您必须考虑捕获异常。