Ответ 1
К сожалению, я не думаю, что здесь существует хорошее "жесткое и быстрое" правило. Это зависит от того, как вы ожидаете, что результаты будут использованы, и что делает сам запрос.
Мои первоначальные мысли - это любое выражение, которое может повторяться более одного раза или, чтобы быть более безопасным, если потенциальные итерации не очевидны, любое выражение, результат которого никогда не изменится.
В общем случае, если вы собираетесь использовать результат запроса более одного раза, всегда рекомендуется хранить его через ToList()
или ToArray()
. Это особенно верно, если вы являетесь запросом LINQ, является "дорогим", поскольку он предотвращает запуск более дорогостоящей операции более одного раза.
Как правило, если вы только собираетесь перечислять результаты, я оставил бы его как IEnumerable<T>
. Если вы планируете сохранять результаты или использовать результаты более одного раза, то их сохранение в коллекции может быть полезным.
Другим местом для просмотра является возвращение результатов в открытый API. Хотя часто бывает полезно возвращать IEnumerable<T>
, в зависимости от ожидаемого варианта использования, вы можете рассмотреть возможность использования ToList()
, чтобы предотвратить выполнение операции более одного раза.
Что касается использования ToList()
или ToArray()
, это действительно зависит от того, как вы будете использовать результаты. Стоимость, связанная с каждой из них, почти идентична (ToList()
на самом деле имеет несколько более низкие служебные служебные данные, если вход не ICollection<T>
). Обычно я предпочитаю ToList()
над ToArray()
, если у меня нет конкретной потребности или желания для массива.