Возможный дубликат:
С# - Список <T> или IList <T>
Всюду написано, что вы должны возвращать IList<T>
из своих методов, а не List<T>
, но я не могу найти никаких действительно веских причин. Я продолжаю находить код, который делает это, а затем вызывающий код обычно выполняет одну из двух задач:
- Вызовите
new List<T>(returnedIList)
, чтобы он мог использовать все полезные методы в List - Возвращает к
List<T>
, поэтому он может использовать все полезные методы в List
Первый - неудобный, а второй - бросок (runtime) InvalidCastException
, если реализация в любом случае изменится на что-то еще (что делает его абсолютно глупым).
Если я использую List<T>
и по какой-то причине должен заменить его реализацией IList<T>
, которую я не могу наследовать от List<T>
, тогда я получу ошибки сборки и должен будет изменить некоторый код. Вероятно, это очень маловероятно, и если это произойдет, это не так много работы, чтобы исправить. Разумеется, не стоит терять преимущества List<T>
и/или бросать /new List<T>
(Exists, Find и т.д.), Чтобы вернуть их для этого маловероятного сценария?
Итак, существуют ли другие причины для возврата IList<T>
?