Реализация Enumerable.AsEnumerable
просто возвращает источник
. Однако Observable.AsObservable
возвращает AnonymousObservable
, подписавшегося на источник, а не просто возвращающего источник.
Я понимаю, что эти методы действительно полезны для изменения монады в рамках одного запроса (переход от IQueryable => IEnumerable). Так почему же реализации различаются?
Версия Observable
более защищена, поскольку вы не можете привести ее к какому-либо известному типу (если бы она изначально была реализована как Subject
, вы бы никогда не быть в состоянии бросить его как таковой). Так почему же версия Enumerable
не делает ничего подобного? Если моим базовым типом является List
, но он представлен как IEnumerable
по AsEnumerable
, можно будет вернуться к Список
.
Обратите внимание, что вопрос не в том, как выставить IEnumerable
без возможности приведения к базовому коду, а в том, почему реализации между Enumerable
и ] Observable
семантически различны.