Методы EnumerateFiles и GetFiles отличаются следующим образом: когда вы используете EnumerateFiles, вы можете начать перечисление коллекции имен до возвращения всей коллекции; когда вы используете GetFiles, вы должны дождаться возвращения всего массива имен, прежде чем вы сможете получить доступ к массиву. Поэтому, когда вы работаете со многими файлами и каталогами, EnumerateFiles может быть более эффективным.
В принципе, EnumerateFiles возвращает IEnumerable, который можно лениво оценивать, а GetFiles возвращает string[], который должен быть полностью заполнен, прежде чем он сможет вернуться.
Ответ 2
EnumerateFiles возвращает IEnumerable<string>, что подразумевает отсроченное выполнение. Он доступен только в формате Fx4 и выше.
Ответ 3
При использовании EnumerateFiles вся скорость теряется, если вы используете .Last. Это, конечно, имеет смысл, потому что для перехода к последнему файлу нужно будет перечислить все файлы, а затем захватить последний.
Однако использование .First или .FirstOrDefault становится очень быстрым, потому что оно просто захватывает первый элемент и перемещается.