4

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

4

2 回答 2

7

List<T1>将每个元素转换为一个元素并将结果存储在另一个元素中的内置方法List<T2>List<T1>.ConvertAll.

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

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

为此,tuple.Item2必须确实是一个List<int?>. 它不是扩展方法,它不能在通用IEnumerable<int?>接口上工作。

于 2012-12-06T06:45:46.513 回答
2

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

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

但是如果一个元素不能转换为TResult类型,这个方法会抛出异常。你必须考虑捕获异常。

于 2012-12-06T06:34:00.590 回答