那么,如果我正在为另一个库中的某个类型编写一个扩展方法,将该类型转换为Rx-IObservable<T>
,那么具体的约定是什么?我问是因为我认为AsObservable
是一条路,但我也见过ToObservable
。我不清楚在什么时候使用哪一个,或者是否有任何真正的惯例。
会不会是ToObservable
被保留用于将预期产生单个事件的东西转换为IObservable<T>
,而AsObservable
被保留用于把预期产生事件序列的东西转换成IObervable<T>
?
除非您有充分的理由编写自己的跨对偶运算符,否则在处理Enumerables和Observables时不需要编写"to"后缀。
观察以下事实:
ToObservable
预计将基于拉的序列转换为基于推的ToEnumerable
有望将基于推送的序列转换为基于pull-based的AsObservable
预计将基于推送的类型包装为IObservable< T >
AsEnumerable
预期将基于拉的类型包装为IEnumerable< T >
因此,当您编写切换源的对偶性的方法时,应该使用To
,而当生成的对偶性与源的对偶相同时,应使用As
。
在大多数情况下,您将为自己的方法使用As
,因为ToObservable
和ToEnumerable
的交叉对偶运算符已经为您编写好了。
资料来源:个人经历,MSDN文档(上图),Erik Meijer本人。
我不知道有任何官方指导,但我会使用的主要指标是查看你正在做的工作量。在大多数情况下,要做大量的工作(这本身就是主观的),比如将IEnumerable变成IOobservable,我会使用ToObservable
。当该方法完成相当琐碎的工作时,就像Observable.AsObservable
扩展方法一样,AsObservable
似乎是更好的选择。这两种方法之间的另一个显著区别是,AsObservable
只不过是一个类型转换,并且不会对参数的行为进行任何实际更改,但Observable.ToObservable(IEnumerable<T>)
返回的对象具有明显不同的语义。