我有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,所以答案可能会利用新的语言功能。
答案 0 :(得分:51)
可以按照其他人的建议使用Select
,但您也可以使用ConvertAll
:
List<double> doubleList = intList.ConvertAll(x => (double)x);
这有两个好处:
ToList
方法不知道Select
结果的大小,因此可能需要重新分配缓冲区。 ConvertAll
知道源和目标大小,因此它可以一次完成所有操作。它也可以在没有迭代器的抽象的情况下完成。缺点:
List<T>
和数组。如果您获得简单IEnumerable<T>
,则必须使用Select
和ToList
。答案 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开始,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