Проще говоря, принятие перечислимого позволяет вашей функции быть совместимой с более широким диапазоном входных аргументов, таких как массивы и запросы LINQ.
Чтобы изложить при принятии запросов LINQ, можно сделать:
UpdateTermInfo(myTermList.Where(x => somefilter));
Кроме того, указание интерфейса, а не конкретного класса, позволяет другим предоставлять собственную реализацию этого интерфейса.Таким образом, вы будете «подписным», а не «пропагандистским».(Да, я только что придумал слово.)
В целом (за многими исключениями, касающимися того, какие способности вы хотите зарезервировать для возможных последующих модификаций), рекомендуется применять функции с использованиемаргументы, которые являются наиболее общими, что они могут быть.Это дает максимальную гибкость потребителю вашей функции.
В результате, если вы не можете использовать список для этой функции (возможно, потому, что в более поздний срок вы ожидаете, что вы захотите использовать такие свойства, каккак Count
или оператор индекса), я настоятельно рекомендую вам использовать IList<Term>
вместо List<Term>
по причинам, указанным выше.