がありList<int>
、それを に変換したいと考えています。 をループして次のように新しい に追加するList<double>
以外に、これを行う方法はありますか?List<int>
List<double>
List<int> lstInt = new List<int>(new int[] {1,2,3});
List<double> lstDouble = new List<double>(lstInt.Count);//Either Count or Length, I don't remember
for (int i = 0; i < lstInt.Count; i++)
{
lstDouble.Add(Convert.ToDouble(lstInt[0]));
}
これを行うための優れた方法はありますか? 私は C# 4.0 を使用しているので、回答では新しい言語機能を活用している可能性があります。
ベストアンサー1
あなたできる他の人の提案どおりに使用しますSelect
が、以下も使用できますConvertAll
:
List<double> doubleList = intList.ConvertAll(x => (double)x);
これには 2 つの利点があります。
- LINQを必要としないので、.NET 2.0を使用していて、LINQブリッジ、まだ使用できます。
- より効率的です。
ToList
メソッドは の結果のサイズを認識しないSelect
ため、処理中にバッファを再割り当てする必要がある場合があります。 はConvertAll
ソースと宛先のサイズを認識しているため、すべてを 1 回で実行できます。 また、反復子の抽象化なしでこれを行うこともできます。
欠点:
- これは と 配列でのみ機能します
List<T>
。 プレーンを取得する場合は、と をIEnumerable<T>
使用する必要があります。Select
ToList
- プロジェクトで LINQ を頻繁に使用している場合は、ここでも LINQ を使い続ける方が一貫性があるかもしれません。