2010-06-28 5 views
3

J'ai un tableau d'objets Carpourquoi ne C# convertall nécessitent 2 paramètres

Je veux les conver à une liste d'objets Véhicule

Je pensais que cela fonctionnerait

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

mais son se plaindre que ConvertAll nécessite deux paramètres.

ici est l'erreur:

Erreur 2 En utilisant la méthode générique System.Array.ConvertAll (TInput [], System.Converter) 'exige du type '2' arguments C: \ SVNCheckout \ latestTrunk \ Utility \ test.cs 229 33

Est-ce que j'utilise la mauvaise méthode ici?

+0

C# n'a pas de méthode 'ConvertAll'. –

Répondre

4

Vous utilisez ConvertAll sur un tableau de voitures (voitures []) au lieu d'une liste des voitures (Liste) qui ne nécessite en effet deux paramètres de type 1. Si les voitures sont une liste, votre code fonctionnera.

+0

J'ai mis à jour la question de noter que j'ai un ARRAY (pas une liste). quelle est la meilleure pratique étant donné que j'ai un tableau – leora

+1

@ooo Array.ConvertAll (voitures, c => ConvertToVehicle (voiture)); ConvertAll est une méthode statique sur la classe Array. –

0

Si la voiture est un sous type de type de véhicule Super, vous pouvez faire ce qui suit.Il devrait fonctionner aussi bien si ConvertToVehicle renvoie un type de véhicule.

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

voitures est un tableau – leora

1

C'est une fonction statique, écrite avant l'introduction des méthodes d'extension, donc vous ne pouvez pas l'appeler comme une méthode.

La syntaxe correcte:

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

Alors que Array.ConvertAll choses pré-dates comme des méthodes d'extension, votre comportement attendu est exactement comment Select fonctionne:

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

vs

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

Diffère nces:

  • Enumerable.Select, alors que statique, est une méthode d'extension - si semble être une méthode d'instance
  • Array.ConvertAll est statique, mais n'est pas une méthode d'extension
  • Enumerable.Select retourne un IEnumerable<T>, donc vous avez besoin de Enumerable.ToArray pour obtenir un tableau
  • Array.ConvertAll renvoie un tableau déjà, et assure en outre qu'il est la bonne taille beaucoup plus efficacel y que Enumerable.ToArray peut
Questions connexes