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

Ame*_*mes 25 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]));
}
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)

这有两个好处:

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

缺点:

  • 它只适用于List<T>和数组.如果你得到一个平原,IEnumerable<T>你将不得不使用SelectToList.
  • 如果您在项目中大量使用LINQ,那么在此处继续使用它可能会更加一致.


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)


Dar*_*rov 8

您可以使用Select扩展方法执行此操作:

List<double> doubleList = intList.Select(x => (double)x).ToList();
Run Code Online (Sandbox Code Playgroud)