Перегрузка метода, который принимает общий список с разными типами в качестве параметра - PullRequest
0 голосов
/ 29 мая 2009

Как я могу перегрузить метод, который принимает в качестве параметра общий список с разными типами?

Например:

У меня есть два метода, например, так:

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

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

Есть ли способ объединить эти 2 метода в один?

Ответы [ 2 ]

4 голосов
/ 29 мая 2009

Конечно, можно ... используя дженерики!

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

}

Это предполагает, что все ваши «распределения», «PAllocation» и «NPAllocation» имеют общий базовый класс, называемый «BasePAllocationClass». В противном случае вы можете удалить ограничение "где" и выполнить проверку типа самостоятельно.

1 голос
/ 29 мая 2009

Если ваши PAllocation и NPAllocation имеют общий интерфейс или базовый класс, то вы можете создать метод, который просто принимает список этих базовых объектов.

Однако, если они этого не делают, но вы все же хотите объединить два (или более) метода в один, вы можете использовать для этого дженерики. Если объявление метода было что-то вроде:

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

тогда вы можете позвонить, используя:

GetCustomList<NPAllocation>(listOfNPAllocations);
GetCustomList<PAllocation>(listOfPAllocations);
...