2010-06-28 96 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可以
相關問題