2010-06-28 99 views
3

我有车对象的数组为什么C#convertall需要2个参数

我想他们CONVER到车辆的对象列表

我想这会工作

Vehicle[] vehicles = cars.ConvertAll(car=> ConvertToVehicle(car)).ToArray(); 

但其抱怨ConvertAll需要两个参数。

这里是错误:

错误2使用通用方法 'System.Array.ConvertAll(TInput [],System.Converter)' 需要 '2' 类型参数C:\ svncheckout \ latestTrunk \实用\ test.cs 229 33

我在这里使用了错误的方法吗?

+0

C#没有'ConvertAll'方法。 – 2010-06-28 03:12:52

回答

4

你对汽车的阵列使用ConvertAll(车[]),而不是汽车的名单(列表),这确实需要两个类型参数1。如果汽车是一个列表,你的代码将起作用。

+0

我更新了问题,注意我有一个ARRAY(不是一个列表)。考虑到我有一个数组,最佳做法是什么 – leora 2010-06-28 03:06:09

+1

@ooo Array.ConvertAll(cars,c => ConvertToVehicle(car)); ConvertAll是Array类的静态方法。 – 2010-06-28 03:16:28

0

如果汽车是次级车辆超级类型,您可以执行以下操作。如果ConvertToVehicle返回车辆类型,它应该同样适用。

class Vehicle { } 
class Car : Vehicle { } 

class Program 
{ 
    static List<Car> ll = new List<Car>(); 
    static void Main(string[] args) 
    { 
     Vehicle[] v = ll.ConvertAll<Vehicle>(x => (Vehicle)x).ToArray(); 
    } 
} 
+0

汽车是一个阵列 – leora 2010-06-28 03:22:58

1

这是一个静态函数,在引入扩展方法之前编写,因此您不能将其称为方法。

正确的语法:

Array.ConvertAll<Vehicle>(cars, car=> ConvertToVehicle(car)) 
1

虽然Array.ConvertAll预日期之类的扩展方法,您预期的行为是究竟如何Select作品:

Vehicle[] vehicles = cars.Select(car=> ConvertToVehicle(car)).ToArray(); 

VS

Vehicle[] vehicles = Array.ConvertAll(cars, car=> ConvertToVehicle(car)); 

各色NCES:

  • Enumerable.Select,而静态的,是一个扩展方法 - 所以似乎是一个实例方法
  • Array.ConvertAll是静态的,但不是扩展方法
  • Enumerable.Select返回IEnumerable<T>,所以你需要Enumerable.ToArray得到一个数组
  • Array.ConvertAll已经返回一个数组,并且另外确保它是合适的尺寸更有效率y比Enumerable.ToArray可以
相关问题