2016-03-12 4 views
0

Рассмотрим следующий методКак вернуть ICollection из метода?

public ICollection<int> method() 
{ 
    ICollection<int> col = new List<int>(); 
    return col; 
} 

HashSet<int> result = (HashSet<int>) method(); 

Конечно я получаю сообщение об ошибке «Не удается привести объект типа List в HashSet», потому что я instantiaded седловины со списком в методе()

Можно иметь общий метод, который возвращает ICollection и может быть отправлен в HashSet или List, в зависимости от моих потребностей?

+1

№ Объект, который вы возвращаете, представляет собой либо Список, либо HashSet, а не оба. Если вам нужен тот или другой, ваш метод должен вернуть тот или другой. Приведение результата вызова метода нарушает инкапсуляцию и не является хорошей практикой. –

+0

Это было мое предположение, то почему рекомендуется возвращать ICollection, если мне нужно создать экземпляр с помощью конкретной коллекции? Почему бы не просто вернуть тип списка или HashSet ? – Raston

+2

Если вызывающий объект метода должен использовать только методы, доступные из ICollection, то да, предпочтительнее возвращать ICollection. –

ответ

2

Нет, вы не можете сразу бросить его, так как экземпляр возвращается не HashSet или ничего, кроме List, но вы можете легко использовать экземпляр ICollection вернулся, чтобы инициализировать новый экземпляр что вам нужно. Например:

ICollection<int> result = Method(); 
HashSet<int> newHashSet = new HashSet<int>(result); 
Смежные вопросы