Почему AsObservable и AsEnumerable реализованы по-разному?

Реализация Enumerable.AsEnumerable(этот источник IEnumerable)просто возвращает источник. Однако Observable.AsObservable(этот источник IObservable)возвращает AnonymousObservable, подписавшегося на источник, а не просто возвращающего источник.

Я понимаю, что эти методы действительно полезны для изменения монады в рамках одного запроса (переход от IQueryable => IEnumerable). Так почему же реализации различаются?

Версия Observableболее защищена, поскольку вы не можете привести ее к какому-либо известному типу (если бы она изначально была реализована как Subject, вы бы никогда не быть в состоянии бросить его как таковой). Так почему же версия Enumerableне делает ничего подобного? Если моим базовым типом является List, но он представлен как IEnumerableпо AsEnumerable, можно будет вернуться к Список.

Обратите внимание, что вопрос не в том, как выставить IEnumerableбез возможности приведения к базовому коду, а в том, почему реализации между Enumerableи ] Observableсемантически различны.

9
задан RichK 26 March 2012 в 14:22
поделиться