我有一个Car对象数组
我想将它们转换为Vehicle对象列表
我认为这会起作用
Vehicle[] vehicles = cars.ConvertAll(car=> ConvertToVehicle(car)).ToArray();
但它抱怨ConvertAll需要两个参数。
这是错误:
错误2使用泛型方法'System.Array.ConvertAll(TInput [],System.Converter)'需要'2'类型参数C:\ svncheckout \ latestTrunk \ Utility \ test.cs 229 33
我在这里使用错误的方法吗?答案 0 :(得分:4)
你在车辆的数组(Car [])上使用ConvertAll而不是车辆(List)的 List ,它确实需要两个类型参数{{ 3}}。如果汽车是一个列表,您的代码将起作用。
答案 1 :(得分:1)
这是一个静态函数,在引入扩展方法之前编写,所以你不能像方法一样调用它。
正确的语法:
Array.ConvertAll<Vehicle>(cars, car=> ConvertToVehicle(car))
答案 2 :(得分:1)
虽然Array.ConvertAll
预先定义了扩展方法之类的内容,但您的预期行为完全 Select
的工作方式:
Vehicle[] vehicles = cars.Select(car=> ConvertToVehicle(car)).ToArray();
VS
Vehicle[] vehicles = Array.ConvertAll(cars, car=> ConvertToVehicle(car));
的差异:
Enumerable.Select
,而static是一种扩展方法 - 因此出现作为实例方法Array.ConvertAll
是静态的,但不是扩展方法Enumerable.Select
返回IEnumerable<T>
,因此您需要Enumerable.ToArray
才能获得数组Array.ConvertAll
已经返回一个数组,另外确保它的大小比Enumerable.ToArray
答案 3 :(得分:0)
如果Car是Sub Type的车型超级类型,您可以执行以下操作。如果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();
}
}