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