La implementación de Enumerable.AsEnumerable<T>(this IEnumerable<T> source)
simplemente devuelve source
. Sin embargo, Observable.AsObservable<T>(this IObservable<T> source)
devuelve un AnonymousObservable<T>
suscribirse a la fuente en lugar de simplemente devolver la fuente.¿Por qué se implementan AsObservable y AsEnumerable de forma diferente?
Entiendo que estos métodos son realmente útiles para cambiar la mónada en una sola consulta (yendo de IQueryable => IEnumerable). Entonces, ¿por qué difieren las implementaciones?
La versión Observable
es más defensiva, en el sentido de que no se puede convertir a algún tipo conocido (si se implementara originalmente como Subject<T>
nunca sería capaz de lanzarlo como tal). Entonces, ¿por qué la versión Enumerable
no hace algo similar? Si mi tipo subyacente es List<T>
pero lo expongo como IEnumerable<T>
a través de AsEnumerable
, será posible volver a un List<T>
.
Tenga en cuenta que esto no es una cuestión de cómo exponer IEnumerable<T>
sin ser capaz de lanzar al subyacente, pero ¿por qué las implementaciones entre Enumerable
y Observable
son semánticamente diferente.
Gracias por la explicación. Recientemente vi un video en el Canal 9 con Bart De Smet, donde explicó IQbservable y su relación con IObservable. Por la forma en que lo explicó, parecía que AsObservable era el análogo de AsEnumerable en el sentido de que cualquier acción observable ocurriría localmente en vez de remotamente. ¿Entendí totalmente esto (probablemente ...) o simplemente es otro uso de AsObservable? – RichK
No lo sé. Recomiendo hacerle esta pregunta a Bart de Smet. –
Bien gracias, probablemente sea una buena idea. Leí la documentación antes de preguntar, pero la confusión fue como resultado del video mencionado en mi comentario anterior – RichK