Возможный дубликат:
С# - Список <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>?