Следует ли всегда вызывать.ToArray для результатов запроса LINQ, возвращаемых функцией?

Я столкнулся с несколькими случаями Collection was modified; enumeration operation may not executeошибок при возврате результатов запроса LINQ в функцию, например... (Я должен добавить, что функция действует как реализация интерфейса, а результаты оставляются. этот модуль для использования в другом.)

Public Function GetTheFuzzyFuzzbuzzes() As IEnumerable(of FuzzBuzz) _
    Implements IFoo.GetTheFuzzyFuzzBuzzes

    Return mySecretDataSource.Where(Function(x) x.IsFuzzy)
End Function

Должен ли я, как правило, всегда вызывать .ToArrayпри возврате результата запроса LINQ в методе получения функции или свойства, если базовые данные могут быть изменены? Я знаю, что это несколько снижает эффективность, но у меня есть ощущение, что это безопасно , и поэтому его всегда следует делать, чтобы избежать проблем с временной связью.

Изменить:

Позвольте мне лучше объяснить проблемную область.

У нас есть основанная на графе реализация нашей основной области интересов, которая является проблемой оптимизации. Сущности представлены в виде узлов графа. Ребра, взвешенные с различной стоимостью и другими параметрами, выражают отношения между узлами. По мере того, как пользователь манипулирует данными, мы создаем разные грани и оцениваем различные варианты, которые он может выбрать в сравнении с текущим состоянием, чтобы дать ему обратную связь о результатах каждого варианта. Изменения, внесенные в данные на сервере другими пользователями и программами, немедленно распространяются на клиент с помощью технологии push. Мы используем много потоков...

... все это означает, что у нас есть много вещей, происходящих очень асинхронно.

Наша программа разделена на модули (на основе принципа единой ответственности )с контрактным проектом и решенным -проектом реализации -во время выполнения -, что означает, что мы в значительной степени полагаемся на интерфейсы.Обычно мы передаем данные между модулями, используя IEnumerable (, так как они вид -из -вид -из неизменяемый ).

10
задан Jeff B 14 July 2016 в 21:54
поделиться