C#将List 转换为List

我有一个List ,我想将它转换为List 。 有没有办法做到这一点,除了循环List并添加到新的List如下所示:

 List lstInt = new List(new int[] {1,2,3}); List lstDouble = new List(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,所以答案可能会利用新的语言function。

您可以使用LINQ方法:

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

要么:

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

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

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

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

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

这有两个好处:

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

缺点:

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

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

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

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

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

您可以使用方法组:

 lstDouble = lstInt.Select(Convert.ToDouble) 

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