我有一个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]));
}
Run Code Online (Sandbox Code Playgroud)
这有什么奇特的方法吗?我正在使用C#4.0,所以答案可能会利用新的语言功能.
Jon*_*eet 51
您可以Select按照他人的建议使用,但您也可以使用ConvertAll:
List<double> doubleList = intList.ConvertAll(x => (double)x);
Run Code Online (Sandbox Code Playgroud)
这有两个好处:
ToList方法不知道结果的大小Select,因此可能需要重新分配缓冲区.ConvertAll知道源和目标大小,所以它可以一次完成.它也可以在没有迭代器的抽象的情况下完成.缺点:
List<T>和数组.如果你得到一个平原,IEnumerable<T>你将不得不使用Select和ToList.Guf*_*ffa 32
您可以使用LINQ方法:
List<double> doubles = integers.Select<int, double>(i => i).ToList();
Run Code Online (Sandbox Code Playgroud)
要么:
List<double> doubles = integers.Select(i => (double)i).ToList();
Run Code Online (Sandbox Code Playgroud)
此外,list类有一个ForEach方法:
List<double> doubles = new List<double>(integers.Count);
integers.ForEach(i => doubles.Add(i));
Run Code Online (Sandbox Code Playgroud)
您可以使用Select扩展方法执行此操作:
List<double> doubleList = intList.Select(x => (double)x).ToList();
Run Code Online (Sandbox Code Playgroud)