4

現時点では使用していますList<int> ints = tuple.Item2.Select(s => s.Value).ToList()が、tuple.Item2に1000のアイテムがある場合、これは非効率に見えます。これを達成するためのより良い方法はありますか?forループを使用する場合を除きます。

4

2 に答える 2

7

各要素を1つに変換し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?>インターフェイスでは機能しません。

于 2012-12-06T06:45:46.513 に答える
2

Cast<>これを実現するには、Linq を使用するだけです。

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

ただし、要素を TResult 型にキャストできない場合、このメソッドは例外をスローします。例外をキャッチすることを検討する必要があります。

于 2012-12-06T06:34:00.590 に答える