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