2009-05-29 7 views
0

Comment est-ce que je peux surcharger une méthode qui prend comme paramètre une liste générique avec différents types?Surcharge d'une méthode qui prend comme paramètre une liste générique avec différents types

Par exemple:

J'ai deux méthodes comme ceci:

private static List<allocations> GetAllocationList(List<PAllocation> allocations) 
{ 
    ... 
} 

private static List<allocations> GetAllocationList(List<NPAllocation> allocations) 
{ 
    ... 
} 

Est-il possible que je peux combiner ces 2 méthodes en un seul?

Répondre

4

Bien sûr ... en utilisant des génériques!

private static List<allocations> GetAllocationList<T>(List<T> allocations) 
    where T : BasePAllocationClass 
{ 

} 

Cela suppose que vos "allocations", "PAllocation" et "NPAllocation" partagent une classe de base appelée "BasePAllocationClass". Sinon, vous pouvez supprimer la contrainte "where" et faire le type de vérification vous-même.

+0

J'utilise votre suggestion, mais comment puis-je le faire de la vérification de type? J'ai également besoin de parcourir le paramètre allocations. J'ai essayé d'utiliser allocations.ForEach (delegate (PAllocation pa) {...}); mais j'obtiens une erreur qui indique la signature de fonction anonyme incompatible. Des idées? – Jon

+0

ne pouvez-vous pas simplement faire (foreach var dans les allocations)? – womp

1

Si votre PAllocation et NPAllocation partagent une interface commune ou une classe de base, vous pouvez créer une méthode qui accepte simplement une liste de ces objets de base. Cependant, si ce n'est pas le cas, mais que vous souhaitez toujours combiner les deux méthodes (ou plus) en une, vous pouvez utiliser des génériques pour le faire. Si la déclaration de méthode était quelque chose comme:

private static List<allocations> GetCustomList<T>(List<T> allocations) 
{ 
    ... 
} 

alors vous pouvez l'appeler à l'aide:

GetCustomList<NPAllocation>(listOfNPAllocations); 
GetCustomList<PAllocation>(listOfPAllocations); 
+0

la partie et peut être omise car le type sera déduit automatiquement – configurator

Questions connexes