Если я неправильно вас понял, ваш вопрос может быть вызван неправильным пониманием. Ничто не возвращает IEnumerable. В первом случае возвращается Enumerator, который реализует foreach, позволяя вам получать экземпляры MyClass, по одному за раз. Он (возвращаемое значение функции) типизируется как IEnumerable, чтобы указать, что он поддерживает поведение foreach (и некоторые другие)
Вторая функция фактически возвращает List, который, конечно, также поддерживает IEnumerable (foreach поведение). Но это фактическая конкретная коллекция объектов MyClass, созданная вызванным вами методом (второй)
Первый метод вообще не возвращает никаких объектов MyClass, он возвращает тот объект перечислителя, который создается платформой dotNet и кодируется за кулисами для создания экземпляра нового объекта MyClass при каждой итерации по нему.
РЕДАКТИРОВАТЬ: Подробнее
Более важное различие заключается в том, хотите ли вы, чтобы элементы удерживались на месте для вас внутри класса во время итерации, или хотите, чтобы они создавались для вас при итерации.
Другое соображение состоит в том, что ... предметы, которые вы хотите вернуть, уже существуют где-то еще? т.е. собирается ли этот метод перебирать набор (или отфильтрованное подмножество) некоторой существующей коллекции? или это создание предметов на лету? если последнее, имеет ли это значение имеет значение , если предмет является точно таким же экземпляром каждый раз, когда вы его "получаете"?
Для объектов, определенных для существующих вещей, которые можно назвать сущностью - что-то с определенной идентичностью , вы, вероятно, хотите, чтобы последовательные выборки возвращали один и тот же экземпляр.
Но, может быть, другой экземпляр с таким же состоянием полностью эквивалентен? (Это будет называться типом значения объект, такой как номер телефона, или адрес, или точка на экране. Такие объекты не имеют идентичности, за исключением того, что подразумевается их состоянием. В этом последнем случае это не имеет значения, возвращает ли перечислитель один и тот же экземпляр или только что созданную идентичную копию каждый раз, когда вы его «получаете» ... Такие объекты, как правило, являются неизменяемыми, они одинаковы, они остаются одинаковыми и функционируют одинаково.