因此,如果我正在为另一个将类型转换为Rx IObservable<T>
的库中的类型编写扩展方法,那么约定究竟是什么?我问,因为我认为AsObservable
是要走的路,但我也见过ToObservable
。我不清楚在何时或是否有任何真正的惯例时使用哪个。
是否ToObservable
保留用于将预期产生单个事件的内容转换为IObservable<T>
,其中AsObservable
保留用于转换预期会生成序列的内容将事件转换为IObervable<T>
?
答案 0 :(得分:6)
除非你有充分的理由编写自己的交叉对偶运算符,否则在处理Enumerables和Observables时你不需要写一个“To”后缀。
遵守以下事实:
ToObservable
需要将基于pull的序列转换为基于推送的序列。 ToEnumerable
应将基于推送的序列转换为基于pull的序列。AsObservable
应将基于推送的类型包装为IObservable< T >
。 AsEnumerable
应将基于pull的类型包装为IEnumerable< T >
。因此,当您编写一个切换源的二元性的方法时,应使用To
,并且当得到的二元性与源的相同时,应使用As
。
在大多数情况下,您将As
用于自己的方法,因为ToObservable
和ToEnumerable
的交叉对偶运算符已经为您编写。
来源:个人经验,MSDN文档(上图),Erik Meijer本人。
答案 1 :(得分:5)
我不知道任何官方指导,但我会使用的主要指标是查看您正在做的工作量。对于大多数情况,有一些非常重要的工作(这本身就是主观的),例如将IEnumerable转换为IObservable,我会使用ToObservable
。当该方法执行相当简单的工作时,与Observable.AsObservable
扩展方法一样,AsObservable
似乎是更好的选择。这两种方法之间的另一个显着区别是AsObservable
不仅仅是类型转换,并且不会对参数的行为进行任何实际更改,但Observable.ToObservable(IEnumerable<T>)
返回具有显着不同语义的对象。