C#将List <int>转换为List <double> </double> </int>

时间:2010-01-18 07:32:22

标签: c# generics

我有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,所以答案可能会利用新的语言功能。

7 个答案:

答案 0 :(得分:51)

可以按照其他人的建议使用Select,但您也可以使用ConvertAll

List<double> doubleList = intList.ConvertAll(x => (double)x);

这有两个好处:

  • 它不需要LINQ,所以如果你使用的是.NET 2.0而又不想使用LINQBridge,你仍然可以使用它。
  • 效率更高:ToList方法不知道Select结果的大小,因此可能需要重新分配缓冲区。 ConvertAll知道源和目标大小,因此它可以一次完成所有操作。它也可以在没有迭代器的抽象的情况下完成。

缺点:

  • 它仅适用于List<T>和数组。如果您获得简单IEnumerable<T>,则必须使用SelectToList
  • 如果你在项目中大量使用LINQ,那么在这里继续使用它可能会更加一致。

答案 1 :(得分:32)

您可以使用LINQ方法:

List<double> doubles = integers.Select<int, double>(i => i).ToList();

或:

List<double> doubles = integers.Select(i => (double)i).ToList();

此外,list类有一个ForEach方法:

List<double> doubles = new List<double>(integers.Count);
integers.ForEach(i => doubles.Add(i));

答案 2 :(得分:8)

您可以使用Select扩展程序执行此操作:

List<double> doubleList = intList.Select(x => (double)x).ToList();

答案 3 :(得分:2)

你可以在.Net Framework 2.0里面使用ConvertAll方法,这是一个例子

        List<int> lstInt = new List<int>(new int[] { 1, 2, 3 });
        List<double> lstDouble = lstInt.ConvertAll<double>(delegate(int p)
        {
            return (double)p;
        });

答案 4 :(得分:1)

您可以使用方法组:

lstDouble = lstInt.Select(Convert.ToDouble)

答案 5 :(得分:0)

您可以使用Select或ConvertAll。请记住,ConvertAll也可以在.Net 2.0中使用

答案 6 :(得分:0)

.NET 3.5-4.8 +

从.NET 3.5开始,the LinQ Cast function就是为此专门创建的。

用法:

List<double> doubles = integers.Cast<double>().ToList();

示例摘自上面链接的文档:

System.Collections.ArrayList fruits = new System.Collections.ArrayList();
fruits.Add("mango");
fruits.Add("apple");
fruits.Add("lemon");

IEnumerable<string> query =
    fruits.Cast<string>().OrderBy(fruit => fruit).Select(fruit => fruit);

// The following code, without the cast, doesn't compile.
//IEnumerable<string> query1 =
//    fruits.OrderBy(fruit => fruit).Select(fruit => fruit);

foreach (string fruit in query)
{
    Console.WriteLine(fruit);
}

// This code produces the following output: 
//
// apple 
// lemon
// mango